在进行分组统计时会用到分组查询,好比按部门统计人数、按工种统计工资状况等。分组查询必定会使用到分组函数,也必定会用到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;