GROUP BY...HAVING 组合查询大总结
环境:DB2 V9
说明:鉴于时间关系,不再给出实验环境脚本。
一、GROUP BY的理解
GROUP BY是SELECT语句的从句,用来指定查询分组条件,主要用来对查询的结果进行分组,相同组合的分组条件在结果集中只显示一行记录。使用GROUP BY从句时候,通过添加聚合函数(主要有COUNT()、SUM、MAX()、MIN()等)可以使数据聚合。
GROUP BY插叙列中使用聚合函数是针对每个分组的。例如:
SELECT SUBSTR(A.HYLB_DM,1,2),COUNT(*)
FROM DJ_ZT A
GROUP BY SUBSTR(A.HYLB_DM,1,2);
-----------------------
01 2071
02 679
03 17952
04 150
05 5921
06 11406
07 3030
08 51308
09 3940
10 1229
11 3548
12 6916
13 1003
14 537
15 11471
16 44
17 135
18 676
19 5747
'[Null]' 84
GROUP BY用来指定分组条件,是一个数学集合的概念,比如针对一列进行分组,则组合分组条件的集合数为1。如果有两个分组条件,则组合分组条件的集合数为2。因此带有GROUP BY的查询一般成为分组查询,也叫组合查询。组合记录的多少取决于组合集合(不包含重复元素)中元素的个数。例如,组合条件为一列,则查询结果集记录条数应该等于这个列所有字段所组成(数学意义上的)集合的元素个数(NULL字段也算一个)。如果有两个组合列,则记录数等于实际中存在的两个列所组合的数目。
SELECT XZ,DFMC
FROM ODS.DM_RPT_QYHF
WHERE XZ='02'
GROUP BY XZ,DFMC;
--------------------------
02 '中外合作'
02 '中外合资'
02 '中外股份'
02 '外商投资'
02 '外国及港澳台地区在境经营'
02 '外国及港澳台地区常驻代表机构'
SELECT XZ,DFMC
FROM ODS.DM_RPT_QYHF
GROUP BY XZ,DFMC;
--------------------------
01 '其他'
01 '内资公司'
01 '国有'
01 '股份合作'
01 '集体'
02 '中外合作'
02 '中外合资'
02 '中外股份'
02 '外商投资'
02 '外国及港澳台地区在境经营'
02 '外国及港澳台地区常驻代表机构'
03 '个人独资'
03 '合伙企业'
03 '私营有限'
03 '私营股份'
'[Null]' '[Null]'
SELECT XZ,DFDM,DFMC,COUNT(*)
FROM ODS.DM_RPT_QYHF
GROUP BY XZ,DFDM,DFMC;
---------------------------------