分组查询
- 分组查询中的筛选条件分两类
数据源 | 位置 | 关键字 | |
---|---|---|---|
分组前筛选 | 原始表 | group by子句前面 | where |
分组后筛选 | 分组后的表 | group by子句后面 | having |
分组前筛选
语法:SELECT 分组函数,字段 FROM 表 WHERE 筛选条件 GROUP BY 字段l;
分组前的筛选的数据源是原始表
演示:在t_dictionary表中,查询id值的总和,val的值,且筛选出id>1的值和按照val进行分组查询
t_dictionary表
演示语法:SELECT SUM(id),val FROM t_dictionary WHERE id>1 GROUP BY val;
结果:
分组后筛选
语法:SELECT 分组函数,字段 FROM 表 GROUP BY 字段 HAVING 筛选条件;
演示:在t_dictionary表中,查询id值的总和,val的值,且筛选出id>1的值和按照val进行分组查询,并且val>1
因为分组后的筛选的数据源是分组后的表
所以我们在这个表中筛选出val>1的表
演示语法:SELECT SUM(id),val FROM t_dictionary WHERE id>1 GROUP BY val HAVING val>1;
结果:
- 注意:
1:分组函数做条件肯定是在group by子句后面
2:可以用分组前筛选,就优先使用。
3:group by子句支持当个字段分组,多个字段分组(逗号隔开,没有顺序要求),表达式函数
4:也可以添加排序order by