######## DQL分组查询
SELECT 列名 FROM 表名 GROUP BY 分组的列名 HAVING 分组后的条件
-- 注意:直接按照字段分组,默认提取每组的第一个人作为结果数据,这样是没有意义的!
SELECT * FROM tb_student02 GROUP BY sex ;
-- 分组一般要带分组条件或者进行聚合统计,否则毫无意义
-- 需求:查询出男人中和女人中的最低数学成绩 ,分组一般要带分组字段查询!
SELECT MIN(math) , sex FROM tb_student02 GROUP BY sex ;
-- 需求:查询出男人和女人的英文平均分
SELECT AVG(IFNULL(english , 0 )) , sex FROM tb_student02 GROUP BY sex ;
-- 需求:查询年龄大于25岁的人,按性别分组,统计每组的人数
SELECT COUNT(*) , sex FROM tb_student02 WHERE age > 25 GROUP BY sex;
### 对分组后的结果过滤
-- 先分组,再过滤
查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据。以下代码是否正确?
SELECT COUNT(*) , sex FROM tb_student02 WHERE age > 25 GROUP BY sex WHERE COUNT(*) > 2; -- 错误的
-- 分组以后的条件必须放在having之后,否则代码报错!
SELECT COUNT(*) , sex FROM tb_student02 WHERE age > 25 GROUP BY sex HAVING COUNT(*) > 2;
-- 需求:查询出英文成绩平均分高于80分的一组。
SELECT AVG(IFNULL(english , 0)) , sex FROM tb_student02 GROUP BY sex HAVING AVG(IFNULL(english , 0)) > 80;