昨天工作時,因爲一個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一起分組,即兩個字段作爲一個整體,看可以分多少組。兩個字段作唯一性分組,而不是做排列組合。