文章目录
- 1、分组的概念
- 2、聚合函数与分组配合使用
- 3、查询数据的直方图(REPLICATE())
- 4、排序分组结果(ORDER BY放在分组后面)
- 5、反转查询(CASE与分组的结合)
- 6、两个分组条件(前面的优先级高)
- 7、HAVIG子句分组条件(只查询分组的某些字段)
- 8、where、having、group by、order by的顺序
1、分组的概念
(1)就是按照字段的值进行划分组别并去除重复值。比如将性别进行分组,正常情况下则可以分成两组,一组是男性,一组是女性。
(2)注意
分组查询的字段只能是该分组字段;
或者是使用 聚合函数 的按照该分组之后的字段。
2、聚合函数与分组配合使用
(1)统计 生物01 班级的女生人数
先进行GROUP分组,分成5个组;
再在每个组中找WHERE条件,CLASS=‘生物01’ AND SEX=‘女’;
最后列出CLASS行和对应满足WHERE条件的数量。(2)错误示范
不分组是无法筛选出同时满足 字段和聚合函数 条件的结果。
3、查询数据的直方图(REPLICATE())
查询选课的人数直方图:
REPLICATE()函数中的第一个参数是直方图表示的符号,第二个参数是每计算一个COUNT则增长的数量,*3表示增长3个。
因此K411表示3个人,K422表示2个人……
此外,还需要按照课程号进行分组,再每个分组(课程)中进行统计人数。
4、排序分组结果(ORDER BY放在分组后面)
按照统计的选修每个课程的人数量进行降序排列:
5、反转查询(CASE与分组的结合)
将每个班级的男生与女生人数统计出来:
6、两个分组条件(前面的优先级高)
当有2个分组条件时,前面的分组条件优先级高,也就是先按照前面的字段进行分组,再按照后面的字段进行分组。
7、HAVIG子句分组条件(只查询分组的某些字段)
分组查询时将其他字段信息过滤掉,这样就可以针对性得查询字段。与where不同的是,having是在分组时就筛选出某些字段值,也就是确定了哪些分组。
having是在分组时筛选组,where是筛选结果。不过二者在很多时候可以相互替换。
注意:having中可以使用聚合函数,而where中不可以使用聚合函数。
查询 爆破01 和 生物01 班级的人数:
8、where、having、group by、order by的顺序
(1)SELECT
(2)FROM
(3)WHERE
(4)GROUP BY
(5)HAVING
(6)ORDER BY