MySQL:排序和分组

1、排序

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

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

复制代码
SELECT * FROM products
ORDER BY prod_price DESC, prod_name ASC;

2、分组

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;

分组后排序

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

having

  • having 用于对汇总的 group by 结果进行过滤。
  • having 一般都是和 group by 连用。
  • wherehaving 可以在相同的查询中。

使用 WHERE 和 HAVING 过滤数据

复制代码
SELECT cust_name, COUNT(*) AS num
FROM Customers
WHERE cust_email IS NOT NULL
GROUP BY cust_name
HAVING COUNT(*) >= 1;

having vs where

  • where:过滤过滤指定的行,后面不能加聚合函数(分组函数)。wheregroup by 前。
  • having:过滤分组,一般都是和 group by 连用,不能单独使用。havinggroup by 之后。
相关推荐
小二·6 小时前
RAG + 向量数据库实战:ChromaDB / Milvus / FAISS 选型与性能横评
数据库·milvus·faiss
矜持的左手6 小时前
电子小白的枕边书:电子学(The Art of Electronics)
数据库·restful
吴声子夜歌6 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存
蓝天下的守望者7 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
上海云盾-小余7 小时前
网站频繁遭遇 SQL 注入溯源与原生漏洞修复全流程总结
数据库·sql
数据库小学妹7 小时前
国家区域医疗中心国产化改造实战:数据库选型、跨院区数据互通与踩坑经验
数据库·国产数据库·数据库选型·医疗信息化·信创数据库·医疗信创
TPBoreas8 小时前
MySQL性能优化面试全攻略
mysql·面试·性能优化
xlq223228 小时前
11.表的内外连接,索引
mysql
AllData公司负责人9 小时前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine