打好基础——数据库——排序和分组

在 SQL 中,你可以使用 ORDER BY 子句对结果进行排序。ORDER BY 子句允许你按照一个或多个列对查询结果进行升序(顺序)或降序(倒序)排序。

  1. 单列排序
  2. 多列排序

单列排序

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 ASC; -- 升序排序

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 DESC; -- 降序排序

在这个例子中,column1 是你想要按照其进行排序的列。使用 ASC 关键字进行升序排序(默认),使用 DESC 关键字进行降序排序。

多列排序

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 ASC, column2 DESC; -- 先按 column1 升序排序,再按 column2 降序排序

在这个例子中,查询结果将首先按照 column1 进行升序排序,然后在具有相同 column1 值的情况下,按照 column2 进行降序排序。

注意事项

需要注意的是,ORDER BY 子句应该在查询的最后使用,以确保在排序之前已经执行了所有其他操作,例如过滤和连接。

通过适当地使用 ORDER BY 子句,你可以按照指定的顺序对查询结果进行排序,以满足你的需求。


GROUP BY 是 SQL 中的一个语句,它的主要作用是对结果集进行分组,以便对每个组执行聚合操作,如求和 (SUM)、平均值 (AVG)、计数 (COUNT)、最大值 (MAX)、最小值 (MIN)等。

分组需要满足以下规则:

“only_full_group_by”规则要求SELECT语句中的每一列,如果不是聚合函数(如SUM, COUNT, AVG等)的参数,那么就必须包含在GROUP BY子句中。这样可以确保查询的结果对于每个组都是”函数上依赖的”,即在每个组内具有唯一的值。

举个例子,假设你有一个”销售记录”的表,其中有”日期”、”商品”和”销售额”三个字段,你想要查询每一天的总销售额,可以使用 GROUP BY 来实现:

SELECT 日期, SUM(销售额) as 总销售额
FROM 销售记录
GROUP BY 日期;

这个查询将”销售记录”表按”日期”字段进行分组,然后对每一组(也就是每一天的销售记录)计算总销售额。

如果你想按照多个字段进行分组,可以在 GROUP BY 语句中列出多个字段。例如,如果你想按照日期和商品来计算每个商品每天的销售额,可以这样写:

SELECT 日期, 商品, SUM(销售额) as 总销售额
FROM 销售记录
GROUP BY 日期, 商品;

需要注意的是,SELECT 语句中列出的每个非聚合字段(在这个例子中是”日期”和”商品”),都应该包含在 GROUP BY 语句中。这样才能确保查询的结果在每个组内都是唯一的。这就是前面提到的 “only_full_group_by” 规则。