SQL必知必会 第10课 分组数据

10.1 数据分组

分组可以将数据分为多个逻辑组,对每个组进行聚集计算。

10.2 创建分组

# GROUP BY 子句指示DBMS按照vend_id 排序并分组数据
select vend_id, count(*) as num_prods
from products
group by vend_id;

在这里插入图片描述

10.3 过滤分组

通过HAVING子句

# 过滤出两个以上订单的分组
select cust_id, count(*) as orders 
from orders 
group by cust_id
having count(*) >= 2;

在这里插入图片描述
WHERE 在数据分组前进行过滤,而HAVING 在数据分组之后进行过滤。

# 列出具有两个以上产品且其价格大于等于4的供应商
select vend_id, count(*) as onum_prods 
from products
where prod_price >= 4
group by vend_id
having count(*) >= 2

在这里插入图片描述

10.4 分组和排序

group by 和 order by 的区别

ORDER BYGROUP BY
对产生的输出排序对行分组,但输出可能不是分组的顺序
任意列都可以使用只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要如果与聚集函数一起使用列(或表达式),则必须使用

一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。

# 按订购物品的数目排序输出
select order_num, count(*) as items 
from orderItems
group by order_num
having count(*) >= 3
order by items, order_num;

在这里插入图片描述

10.5 select 子句顺序

子句说明是否必须使用
SELECT要返回的列或表达式
FROM从中检索数据的表仅在从表选择数据时使用
WHERE行级过滤
GROUP BY分组说明仅在按组计算聚集时使用
HAVING组级过滤
ORDER BY输出排序顺序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值