需求:
合并某一個字段的相同項,并且要按照另一個時間字段排序。
例子:

一開始用
select city from table group by city order by date desc
會報錯因為date沒有包含在聚合函數或 GROUP BY 子句中
然后用將date放入group by中:
select city from table group by city,date order by date desc
得到結果

但是得到的結果還是有重復的,沒有解決
如果不按照時間排序,就會影響我之后的操作,所以百度了很久,終于找到了解決方法:
正確寫法:
select city from table group by city order by max(date) desc
發現很神奇的結果出來了

然后又找了一些資料,發現max()神奇的地方:
select city,max(date) as d1 from table group by city,d1 order by d1 desc

這里寫在前面還能看到時間排序
如果還有更好的方法大家一起交流。
補充:MYSQL中去重,DISTINCT和GROUP BY的區別
例如有如下表user:

distinct會過濾掉它后面每個字段都重復的記錄
用distinct來返回不重復的用戶名:select distinct name from user;,結果為:

用distinct來返回不重復的name和id:select distinct name,id from user;,結果為:

distinct name,id 這樣的寫法,mysql 會認為要過濾掉name和id兩個字段都重復的記錄。
如果sql這樣寫:
select id,distinct name from user
這樣mysql會報錯,因為distinct必須放在要查詢字段的開頭。
group by則可以在要查詢的多個字段中,針對其中一個字段去重 :
select id,name from user group by name;
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- 詳解SQL中Group By的用法
- SQL去除重復記錄(七種)
- 深入淺析SQL中的group by 和 having 用法
- MySQL中按照多字段排序及問題解決