SQL学习笔记之分组数据

创建分组

利用group by语句建立分组

select vend_id, count(*) as num_prods
from Products
group by vend_id;

对供应商进行分组后,计算每个供应商的商品个数
分组是指根据某一列分成了很多个子表格,每个组都有对应的检索值
group by之后对每个组的结果分别进行聚集

group by语句注意事项
group by可以包含任意数目的列,可以进行分组嵌套,根据列出现的顺序进行分组
如果进行了分组嵌套,则在最后的分组结果上进行聚集汇总
group by子句中列出的每一列必须是检索列或者有效的表达式,不能是聚集函数
如果group by子句中列出的表达式在select语句中有别名,必须依旧使用表达式的形式,不可以使用别名
select语句中的每一列都必须在group by子句中给出(group by子句中每一列都要被select检索出来,这样显示结果时才知道每个结果属于哪个分组)
如果group by的分组列中包含NULL值,则NULL值作为单独的一个分组返回
group by子句必须在where子句之后,在order by子句之前

过滤分组

可以使用HAVING关键字对分组进行过滤
HAVING和WHERE的区别:HAVING过滤分组,WHERE过滤行
二者句法一样

select cust_id, count(*) as orders
from Orders
group by cust_id
having count(*) >= 2;

对顾客分组,计算每个顾客的订单数,过滤出订单数大于等于2的顾客
where在分组之前过滤行,having在分组之后过滤组,因此where过滤掉的行不会出现在分组结果中

select vend_id, count(*) as sum_prods
from Products
where prod_price >= 4
group by vend_id
having count(*) > 2;

根据供应商分组,计算每个供应商价格大于等于4的产品数,过滤出产品大于2的供应商分组
如果having之前没有where,可能分组中会多出一些行

分组和排序

group by进行分组,order by进行排序

select order_num, count(*) as items
from OrderItems
group by order_num
having count(*) >= 3
order by count(*), order_num;

用列的表达式/聚集函数进行排序,也可以用别名排序,但是有的DBMS不支持别名排序

select子句顺序

在这里插入图片描述
只有select语句在sql中是必须使用的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值