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© FROM #TEST
GROUP BY A
–结果:
/*
A 4
B 4
/
SELECT B,SUM© FROM #TEST
GROUP BY B
–结果:
/
甲 4
已 4
*/
SELECT A,B,SUM© FROM #TEST
GROUP BY A,B
–结果:
/*
A 甲 3
B 甲 1
A 已 1
B 已 3
*/
SELECT A,B,SUM© 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 的值能分组 则分为同一组,如果不能,那么就新建一组
明白了吗?