GROUP BY...HAVING 组合查询大总结

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;
---------------------------------

你可能感兴趣的:(Microsoft,Visual,Studio,sql,数据库,r语言)