文章目录
- 1、分组的概念
- 2、聚合函数与分组配合使用
- 3、查询数据的直方图(REPLICATE())
- 4、排序分组结果(ORDER BY放在分组后面)
- 5、反转查询(CASE与分组的结合)
- 6、两个分组条件(前面的优先级高)
- 7、HAVIG子句分组条件(只查询分组的某些字段)
- 8、where、having、group by、order by的顺序
1、分组的概念
(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
2、聚合函数与分组配合使用
(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)错误示范
不分组是无法筛选出同时满足 字段和聚合函数 条件的结果。
3、查询数据的直方图(REPLICATE())
查询选课的人数直方图:
SELECT H_CNO,REPLICATE('*', COUNT(*)*3) AS '选课人数'
FROM HOMEWORKS
GROUP BY H_CNO
REPLICATE()函数中的第一个参数是直方图表示的符号,第二个参数是每计算一个COUNT则增长的数量,*3表示增长3个。
因此K411表示3个人,K422表示2个人……
此外,还需要按照课程号进行分组,再每个分组(课程)中进行统计人数。
4、排序分组结果(ORDER BY放在分组后面)
按照统计的选修每个课程的人数量进行降序排列:
SELECT H_CNO,REPLICATE('*', COUNT(*)*3) AS '选课人数'
FROM HOMEWORKS
GROUP BY H_CNO
ORDER BY COUNT(*) DESC
SELECT * FROM HOMEWORKS
5、反转查询(CASE与分组的结合)
将每个班级的男生与女生人数统计出来:
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
6、两个分组条件(前面的优先级高)
SELECT CLASS,COUNT(SNAME) AS '人数'
FROM STU
GROUP BY CLASS
SELECT CLASS,COUNT(SNAME) AS '人数'
FROM STU
GROUP BY CLASS,SEX
当有2个分组条件时,前面的分组条件优先级高,也就是先按照前面的字段进行分组,再按照后面的字段进行分组。
7、HAVIG子句分组条件(只查询分组的某些字段)
分组查询时将其他字段信息过滤掉,这样就可以针对性得查询字段。与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
8、where、having、group by、order by的顺序
(1)SELECT
(2)FROM
(3)WHERE
(4)GROUP BY
(5)HAVING
(6)ORDER BY
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)