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 的值能分组 则分为同一组,如果不能,那么就新建一组
明白了吗?