3 MySQL的分组和排序

文章详细介绍了SQL中的分组功能,包括使用groupby进行数据分组,与聚合函数如count、max、sum、avg结合使用,以及通过having过滤分组结果。同时,讨论了where和having的区别,where在分组前过滤行,不支持聚合函数,而having则在分组后过滤。此外,还阐述了orderby如何对查询结果进行排序,支持多列和不同排序方式。最后,展示了分组后排序的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 分组

1.1. group by

  • group by 子句将记录分组到汇总行中。
  • group by 为每个组返回一个记录。
  • group by 通常还涉及聚合countmaxsumavg 等。
  • group by 可以按一列或多列进行分组。
  • group by 按分组字段进行排序后,order by 可以以汇总字段来进行排序。
SELECT cust_name, COUNT(cust_address) AS addr_num
FROM Customers GROUP BY cust_name;

1.2 过滤分组:having

  • having 用于对汇总的 group by 结果进行过滤。
  • having 一般都是和 group by 连用。
  • where 和 having 可以在相同的查询中。
SELECT cust_name, COUNT(*) AS num
FROM Customers
WHERE cust_email IS NOT NULL
GROUP BY cust_name
HAVING COUNT(*) >= 1;

1.3 having和where的区别

  • where:过滤过滤指定的行,后面不能加聚合函数(分组函数)。wheregroup by 前。
  • having:过滤分组,一般都是和 group by 连用,不能单独使用。havinggroup by 之后

2. 排序

order by 用于对结果集按照一个列或者多个列进行排序。默认按照升序对记录进行排序,如果需要按照降序对记录进行排序,可以使用 desc 关键字。

order by 对多列排序的时候,先排序的列放前面,后排序的列放后面。并且,不同的列可以有不同的排序规则。

SELECT * FROM products
ORDER BY prod_price DESC, prod_name ASC;

3. 分组后排序

SELECT cust_name, COUNT(cust_address) AS addr_num
FROM Customers GROUP BY cust_name
ORDER BY cust_name DESC;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值