SQL查询分组的目的
对数据进行分组统计,比如统计每个班级的人数
一般与聚集函数配合使用.
使用分组可以将数据分为多个逻辑组,对每个逻辑组进行聚集计算,是分组的主要目的.
分组使用的关键字
GROUP BY 根据指定的字段进行分组
本次代码使用的ER图,数据库以mysql为例
-- 根据供应商的ID进行分组,查找每个供应商提供产品的数目
select vend_id, count(*) AS items from products
group by vend_id;
此时,聚集函数count(*)是对每个组的数据进行聚集,而不是对整个数据集。
分组的注意事项
- Group by 可以包含任意数目的列,从而可以更精细的进行聚集
- Group by每列必须是检索列或者有效的表达式。如果在SELECT中使用表达式,则必须在GROUP BY 子句中使用相同的表达式
- 除聚集函数外Select中每个字段都必须出现在Group By 子句中
- Group By的子句必须出现在where子句之后,order by子句之前
使用Having对分组进行过滤
使用Having过滤的是聚集函数的结果,而不是每个字段,使用where过滤的是每个结果
where 和 Having可以同时使用
-- 使用Having对产生的聚集结果进行过滤
select cust_id,count(*) as orders
from orders group by cust_id
having count(*) >= 2
-- 1000000001 2
分组结果的排序
应该显示使用写明order by对分组进行排序
-- 使用order by子句对结果集进行排序
select order_num,count(*) as items
from orderitems
group by order_num
having count(*) >= 3
order by items asc,order_num asc;
/*
20006 3
20009 3
20007 5
20008 5
*/