【轉】mysql查詢根據部分欄位去重
阿新 • • 發佈:2018-12-15
mysql有個關鍵字distinct用來去重的,但是使用時只能放在查詢欄位的最前邊
如: SELECT DISTINCT user_id,age FROM t_user;
若不是放在最前邊,如: SELECT user_id, DISTINCT age FROM t_user;
是會報錯的。 那麼如果我們只想根據age欄位來去重,並且要查出user_id,就不能直接這樣執行。需要另找方法。
閱mysql相關使用後,有個group by可以進行分組,那麼有個思路就是:分組然後去重。
具體看這個需求: 要查詢兩個表所有欄位內容,並且根據第一張表的主鍵去重。 去重前sql:
SELECT a.album_id, a.album_name, a.view_lock, a.view_issue, a.view_key, a.user_id, p.photo_id,p.album_id,p.photo_desc,p.photo_url,p.update_time,p.delete_state FROM album a LEFT JOIN photo p ON a.album_id = p.album_id;
查詢結果:
解決:
SELECT
a.album_id, a.album_name, a.view_lock, a.view_issue, a.view_key, a.user_id,
p.photo_id,p.album_id,p.photo_desc,p.photo_url,p.update_time,p.delete_state ,COUNT(DISTINCT a.album_id)
FROM album a LEFT JOIN photo p ON a.album_id = p.album_id GROUP BY a.`album_id`
結果:
別人的解決思路:
總結:group by 對資料分組後有兩個功能:進行聚合函式(sum,count,max,min等);資料濾重
前文所用及資料分組後的資料濾重功能。