SQL - Group By 與 Order By 的比較

Hello, 動手學習 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. 我們按 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 的全部內容!記住,熟練來自練習,所以不要害怕在你自己的查詢中嘗試這些子句。祝你 SQL 编程愉快,願你的數據總是井井有條且排序完美!

Credits: Image by storyset