当前位置:   article > 正文

关于SQL中group by 和order by 配合使用需要注意到的细节问题_pgsql中group by implement_code order by create_time

pgsql中group by implement_code order by create_time

在进行SQL查询时,我们想要对结果进行分组,并且拿到每个分组中最新的数据。例如

一个表table中有stage 和create_time 两个字段,我们想要以stage为分组条件,并且拿到每个stage中create_time最新的结果。

一部分人可能会直接 GROUP BY stage ORDER BY create_time DESC 这样时不行的,因为SQL语句会先执行GROUP BY 再ORDER BY 这样得到的只是把分组后的结果排序。

可能有人说那我把GROPU BY写在后面不就行了吗,这种写法语法上就是错误的。

正确的思路应该是先对表进行ORDER BY 查询,把查询出来的结果集作为子表进行分组查询

select * from (SELECT * FROM table ORDER BY create_time desc) t1 GROUP BY stage 

很多人以为这样就OK了,确实,从逻辑上来说确实正确。但是忽略了一个问题,因为MySQL有优化器,子查询中的ORDER BY会被忽略掉。我们可以在子查询中加上 LIMIT 来避免优化

select * from (SELECT * FROM table ORDER BY create_time desc LIMIT 10000) t1 GROUP BY stage

LIMIT 尽量写大一点

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/482793
推荐阅读
相关标签
  

闽ICP备14008679号