SQL查询之分组

SQL查询分组的目的

对数据进行分组统计,比如统计每个班级的人数
一般与聚集函数配合使用.
使用分组可以将数据分为多个逻辑组,对每个逻辑组进行聚集计算,是分组的主要目的.


分组使用的关键字

GROUP BY 根据指定的字段进行分组

本次代码使用的ER图,数据库以mysql为例
ER

-- 根据供应商的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
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值