昨天工作时,因为一个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一起分组,即两个字段作为一个整体,看可以分多少组。两个字段作唯一性分组,而不是做排列组合。