**简介**
SQL 中的排序和分组操作是强大且常用的功能,允许用户操纵数据以满足特定的要求。排序用于排列行集中的记录,而分组用于将具有相似特征的记录组合在一起。
**排序**
排序操作使用 ORDER BY 子句,它指定要根据哪些列或表达式对结果进行排序。升序排列使用 ASC 关键字,降序排列使用 DESC 关键字。
**分组**
分组操作使用 GROUP BY 子句,它指定要根据哪些列或表达式对行进行分组。每个组将包含具有相同分组值的行。
**先排序后分组**
将排序与分组结合使用是一个有用的技术,它允许用户在分组之前先对数据进行排序。这可能需要按特定顺序查看分组数据或根据分组值进一步处理数据。
**语法**
sql
SELECT 列1, 列2
FROM 表名
ORDER BY 列1 ASC, 列2 DESC
GROUP BY 列1;
**示例**
考虑以下表:
| id | name | age |
|---|---|---|
| 1 | John | 25 |
| 2 | Jane | 30 |
| 3 | David | 20 |
| 4 | Mary | 25 |
| 5 | Alice | 30 |
要按年龄升序、姓名降序对表进行排序并按年龄分组,可以执行以下查询:
sql
SELECT name, age
FROM people
ORDER BY age ASC, name DESC
GROUP BY age;
输出结果为:
| name | age |
|---|---|
| David | 20 |
| John | 25 |
| Mary | 25 |
| Jane | 30 |
| Alice | 30 |
通过先排序后分组,我们能够按年龄对人员进行分组,同时在每个年龄组内按姓名降序对人员进行排序。
**优势**
结合排序和分组的优势包括:
* 识别相同分组值的不同记录
* 对数据进行更细粒度的分析和处理
* 提高查询效率,因为数据库引擎可以使用排序顺序来优化分组操作