mysql的一次报错排查

昨天工作时,因为一个sql没注意,搞了半天才解决,现在记录下。

业务场景比较复杂,查询的sql也复杂了些。业务逻辑最复杂的地方在其中的一个子查询那,结果最终的结果怎么都不对,以为是子查询那出了问题,对业务逻辑梳理了半天,发现子查询的sql结果是对的。最后发现出错在外面的group by上,晕死。不知道是因为没在意还是误操作,本来是group by a被写成了group by a, b,导致最终的结果多了几条。

group by,分组,常用来对列分组后,然后使用聚合如sum/count/max达到计算的效果,常见的是对一个字段分组,当对多个字段分组的时候,需注意和一个字段分组时的区别。

method status
get 200
post 200
post 400
post 500

加入有如上这个表,如果对status字段进行分组并计算每组的数目,比如

SELECT status, COUNT(status) FROM 表名 GROUP BY status;

得到

200 2
400 1
500 1

比较简单,不多说明。

现在对method和status一起分组

SELECT method, status, COUNT(status) FROM 表名 GROUP BY status, method;

得到

get 200 1
post 200 1
post 400 1
post 500 1

这样是对status和method一起分组,即两个字段作为一个整体,看可以分多少组。两个字段作唯一性分组,而不是做排列组合

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章