GROUP BY 兩個字段(貨多個字段的時候)
當group by 一個字段的時候:
group by 一般和聚合函數一起使用才有意義,比如 count sum avg等,使用group by的兩個要素:
(1) 出現在select后面的字段 要么是是聚合函數中的,要么就是group by 中的.
(2) 要篩選結果 可以先使用where 再用group by 或者先用group by 再用having
那么當group by 后面后兩個字段的時候呢?
我們先看表(先不管表設計時候合理,我們是看group by 分出來的結果)
CREATE TABLE #TEST( A VARCHAR(10), B VARCHAR(10), C INT ) INSERT INTO #TEST VALUES('A','甲',1) INSERT INTO #TEST VALUES('A','甲',1) INSERT INTO #TEST VALUES('A','甲',1) INSERT INTO #TEST VALUES('A','已',1) INSERT INTO #TEST VALUES('B','甲',1) INSERT INTO #TEST VALUES('B','已',1) INSERT INTO #TEST VALUES('B','已',1) INSERT INTO #TEST VALUES('B','已',1) SELECT A,SUM(C) FROM #TEST GROUP BY A --結果: /* A 4 B 4 */ SELECT B,SUM(C) FROM #TEST GROUP BY B --結果: /* 甲 4 已 4 */ SELECT A,B,SUM(C) FROM #TEST GROUP BY A,B --結果: /* A 甲 3 B 甲 1 A 已 1 B 已 3 */ SELECT A,B,SUM(C) FROM #TEST GROUP BY B,A --結果: /* A 甲 3 A 已 1 B 甲 1 B 已 3 */
發現規律沒,如果沒有,尼瑪,再仔細看看!
總結:
GROUP BY A,B
先根據B字段進行分組,如果B能分,A 也能分 就分成同一組
這么說吧
A B
1 2
1 2
1 3
你可以將A B 看成一個組合字段,如果 A+B 的值能分組 則分為同一組,如果不能,那么就新建一組
明白了嗎?