SQL group by去重复且按照其他字段排序的操作

网络编程 2021-07-05 14:37www.168986.cn编程入门
这篇文章主要介绍了SQL group by去重复且按照其他字段排序的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随长沙网络推广过来看看吧

需求

合并某一个字段的相同项,并且要按照另一个时间字段排序。

例子

一开始用

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和idselect 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;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持狼蚁SEO。如有错误或未考虑完全的地方,望不吝赐教。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by