distinct可以做到筛去重复数据的作用,但它只能写在最前面,即select * distinct a,b,c from table;的形式,
如果为select * a,distinct b,c from table;就会报错,
并且如果有多个字段的话只会去除a,b,c都相同的字段,很不方便。
于是发现group by也能起到筛选的作用,并且可以随意指定字段,没有distinct的限制。
但group by的策略是选择最早出现的数据作为留下的数据,即便使用order by也没用,因为它的优先级是比order by排序的优先级高的。
这就会导致一些问题,比如某人当天数据有很多,想要通过group by 保留下那天的最新数据,但直接使用只会保留那天最早的数据。
解决方法:
select* from(select a,b,c from table order by c desc) t1 group by t1.a,t1.b;
也就是先排序,再筛选。