SQL - Group By 与 Order By 对比

你好,有抱负的SQL爱好者们!今天,我们将深入了解SQL中的两个基本子句:Group By 和 Order By。作为你友好邻里的计算机老师,我很高兴引导你们理解这些概念。如果你是编程新手,不用担心——我们将从基础开始,逐步学习。那么,拿起一杯咖啡(或者茶,如果你喜欢的话),让我们开始SQL冒险之旅!

SQL - Group By vs Order By

SQL Group By 子句

什么是 Group By?

Group By 子句就像是你数据的贴心组织者。想象一下你的衣橱乱糟糟的,满是衣服。Group By 帮助你根据某些特性——比如颜色或衣服类型——将这些衣服整理成整洁的一堆。

在SQL术语中,Group By 允许你根据一个或多个列将数据分组。这在你想对这些组进行计算或汇总时特别有用。

基本语法

以下是 Group By 子句的基本结构:

SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;

让我们分解一下:

  • 我们 SELECT 我们希望在结果中看到的列。
  • 我们指定我们从哪个表中获取数据。
  • GROUP BY 部分告诉SQL哪些列用于分组。

示例 1:按产品分组销售

想象我们有一个名为 sales 的表,包含列:product_namequantity_soldsale_date。让我们按产品分组销售:

SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name;

这个查询将向我们展示每个产品的总销售数量。这是怎么回事:

  1. 我们 SELECT product_namequantity_sold 的 SUM。
  2. 我们从 sales 表中获取这些数据。
  3. 我们 GROUP BY product_name,所以SQL将为每个独特的产品创建一个组。

结果可能看起来像这样:

product_name total_sold
Apple 150
Banana 200
Orange 175

示例 2:多列分组

我们也可以通过多列进行分组。假设我们想按产品和日期分组销售:

SELECT product_name, sale_date, SUM(quantity_sold) as daily_total
FROM sales
GROUP BY product_name, sale_date;

这个查询按产品和日期分组我们的销售,向我们展示每个产品的每日总数。

SQL Order By 子句

什么是 Order By?

如果 Group By 是我们的衣橱组织者,那么 Order By 就像是我们把衣服按颜色深浅或长短顺序排列。它完全关于按特定顺序排序我们的数据。

基本语法

Order By 子句的基本结构是:

SELECT column1, column2
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];
  • ASC 表示升序(从小到大,或从A到Z)。
  • DESC 表示降序(从大到小,或从Z到A)。
  • 如果你不指定,SQL 默认为 ASC。

示例 3:按销售排序产品

让我们按他们的总销售额对产品进行排序:

SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name
ORDER BY total_sold DESC;

这个查询执行以下操作:

  1. 按产品分组销售。
  2. 计算每个产品的总销售数量。
  3. 从高到低排序结果。

结果可能如下:

product_name total_sold
Banana 200
Orange 175
Apple 150

示例 4:多列排序

我们也可以按多列排序:

SELECT product_name, sale_date, SUM(quantity_sold) as daily_total
FROM sales
GROUP BY product_name, sale_date
ORDER BY product_name ASC, daily_total DESC;

这个查询:

  1. 按产品和日期分组销售。
  2. 首先按产品名称(字母顺序)排序。
  3. 然后在每个产品组内按每日总数(从高到低)排序。

Group By 与 Order By 对比

现在我们已经看到了 Group By 和 Order By 的实际应用,让我们比较一下它们:

特性 Group By Order By
目的 将数据组织成组 按特定顺序排序数据
使用 与聚合函数一起使用 可以与聚合函数一起或不一起使用
结果 减少行数(汇总) 不改变行数
位置 在查询中位于 ORDER BY 之前 如果有 GROUP BY,则在 GROUP BY 之后
功能性 为聚合计算创建组 确定输出行的顺序

何时使用 Group By

当你想:

  • 汇总数据(如为每个组获取总计或平均值)。
  • 对数据组进行计算。
  • 减少结果集中的行数。

何时使用 Order By

当你想:

  • 按特定顺序对结果进行排序。
  • 以更可读或逻辑顺序展示数据。
  • 在数据集中找到最高或最低的值。

示例 5:结合 Group By 和 Order By

让我们用一个最终的示例来整合所有内容。假设我们想找到每个月销售前三的产品:

SELECT
EXTRACT(MONTH FROM sale_date) as month,
product_name,
SUM(quantity_sold) as total_sold
FROM
sales
GROUP BY
EXTRACT(MONTH FROM sale_date), product_name
ORDER BY
month ASC, total_sold DESC
LIMIT 3;

这个查询:

  1. 按月份和产品分组销售。
  2. 计算每个月每个产品的总销售额。
  3. 按月份(升序)和总销售额(降序)排序结果。
  4. 限制输出为每个月的前三个产品。

就这样!我们已经穿越了 Group By 和 Order By 的领域。记住,熟能生巧,所以不要害怕在你自己的查询中尝试这些子句。快乐编码,愿你的数据总是井井有条、排列得当!

Credits: Image by storyset