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 之后。
相关推荐
大气层煮月亮25 分钟前
Oracle EBS ERP开发——报表生成Excel标准模板设计
数据库·oracle·excel
云和数据.ChenGuang34 分钟前
达梦数据库的命名空间
数据库·oracle
三三木木七1 小时前
mysql拒绝连接
数据库·mysql
蹦跶的小羊羔1 小时前
sql数据库语法
数据库·sql
唐古乌梁海1 小时前
【mysql】InnoDB的聚簇索引和非聚簇索引工作原理
数据库·mysql
我变秃了也没变强1 小时前
pgsql配置密码复杂度策略
数据库·postgresql
PawSQL1 小时前
企业级SQL审核工具PawSQL介绍(1) - 六大核心能力
数据库·sql·oracle
幼稚园的山代王1 小时前
NoSQL介绍
数据库·nosql
꒰ঌ 安卓开发໒꒱1 小时前
Mysql 坏表修复
android·mysql·adb
猫林老师1 小时前
HarmonyOS线程模型与性能优化实战
数据库·分布式·harmonyos