赞
踩
(1)就是按照字段的值进行划分组别并去除重复值。比如将性别进行分组,正常情况下则可以分成两组,一组是男性,一组是女性。
--按性别进行分组,查看性别
SELECT SEX
FROM STU
GROUP BY SEX
(2)注意
分组查询的字段只能是该分组字段;
或者是使用 聚合函数 的按照该分组之后的字段。
--错误: SELECT * FROM STU GROUP BY SEX SELECT CLASS,BIRTH FROM STU GROUP BY SEX --正确: SELECT SEX FROM STU GROUP BY SEX SELECT SEX,COUNT(CLASS),COUNT(BIRTH) FROM STU GROUP BY SEX
(1)统计 生物01 班级的女生人数
SELECT CLASS,COUNT(*) AS '女生人数'
FROM STU
WHERE CLASS='生物01' AND SEX='女'
GROUP BY CLASS
SELECT * FROM STU
先进行GROUP分组,分成5个组;
再在每个组中找WHERE条件,CLASS=‘生物01’ AND SEX=‘女’;
最后列出CLASS行和对应满足WHERE条件的数量。
(2)错误示范
不分组是无法筛选出同时满足 字段和聚合函数 条件的结果。
查询选课的人数直方图:
SELECT H_CNO,REPLICATE('*', COUNT(*)*3) AS '选课人数'
FROM HOMEWORKS
GROUP BY H_CNO
REPLICATE()函数中的第一个参数是直方图表示的符号,第二个参数是每计算一个COUNT则增长的数量,*3表示增长3个。
因此K411表示3个人,K422表示2个人……
此外,还需要按照课程号进行分组,再每个分组(课程)中进行统计人数。
按照统计的选修每个课程的人数量进行降序排列:
SELECT H_CNO,REPLICATE('*', COUNT(*)*3) AS '选课人数'
FROM HOMEWORKS
GROUP BY H_CNO
ORDER BY COUNT(*) DESC
SELECT * FROM HOMEWORKS
将每个班级的男生与女生人数统计出来:
SELECT CLASS,
COUNT(case
when SEX='男' then 1
else NULL end) AS '男生人数',
COUNT(case
when SEX='女' then 1
else NULL end) AS '女生人数'
FROM STU
GROUP BY CLASS
SELECT * FROM STU
SELECT CLASS,COUNT(SNAME) AS '人数'
FROM STU
GROUP BY CLASS
SELECT CLASS,COUNT(SNAME) AS '人数'
FROM STU
GROUP BY CLASS,SEX
当有2个分组条件时,前面的分组条件优先级高,也就是先按照前面的字段进行分组,再按照后面的字段进行分组。
分组查询时将其他字段信息过滤掉,这样就可以针对性得查询字段。与where不同的是,having是在分组时就筛选出某些字段值,也就是确定了哪些分组。
having是在分组时筛选组,where是筛选结果。不过二者在很多时候可以相互替换。
注意:having中可以使用聚合函数,而where中不可以使用聚合函数。
查询 爆破01 和 生物01 班级的人数:
SELECT CLASS,COUNT(*) AS '人数'
FROM STU
GROUP BY CLASS
HAVING CLASS IN('爆破01','生物01')
ORDER BY COUNT(*) DESC
(1)SELECT
(2)FROM
(3)WHERE
(4)GROUP BY
(5)HAVING
(6)ORDER BY
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。