Mysql——分组查询

 在进行分组统计时会用到分组查询,好比按部门统计人数、按工种统计工资状况等。分组查询必定会使用到分组函数,也必定会用到group by子句。
在这里插入图片描述
Tip
  1️⃣在单表分组查询中,全部不是分组函数的查询字段都要出如今group by子句以后,出现的顺序不影响查询结果;
  2️⃣where子句必定是紧跟着from子句的,from关键字后是操做的表对象,where子句中的判断条件要么是常量要么是操做的表对象的字段,且where子句中不支持使用别名,子查询一样如此;
  3️⃣一般而言分组前的数据筛选放在where子句中,分组后的数据筛选放在having子句中,但若是分组后的数据筛选的条件是操做表的字段时(好比分组的条件)也能够放在where子句中(且此时效率更高),可是where子句中是不能使用分组函数的,缘由是分组函数的结果并非操做表的字段,所以咱们能够这么去记忆:只要筛选条件是操做表中的字段就放在where子句中不然放在having子句中,示例:之前两个语句的结果彻底相同,可是第一个语句的效率要高于第二个web

select count(*),order_code 
from lmt_flow_advance_check_apply
where order_code >=  'BJ20190104'
group by order_code;

select count(*),order_code 
from lmt_flow_advance_check_apply
group by order_code
having order_code >=  'BJ20190104';

  4️⃣order by子句放在最后;
  5️⃣order by子句、group by子句和having子句都支持别名;
  6️⃣SQL也支持按表达式或函数分组,且支持别名sql

#使用函数分组
SELECT COUNT(*),LENGTH(last_name)
FROM employees
GROUP BY LENGTH(last_name);

#使用函数分组且使用别名
SELECT COUNT(*) c,LENGTH(last_name) name_len
FROM employees
GROUP BY name_len
HAVING c > 5;