SQL - Group By 與 Order By 的比較
Hello, 動手學習 SQL 的同好們!今天,我們將深入探讨 SQL 中兩個非常重要的子句:Group By 和 Order By。作為你們親切鄰居的電腦老師,我非常高興能夠引導你們了解這些概念。如果你是編程新手,別擔心——我們會從基礎開始,逐步學習。那麼,來一杯咖啡(或者茶,如果你喜歡的話),讓我們開始 SQL 的冒險之旅吧!
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_name
、quantity_sold
和 sale_date
。讓我們按產品分組我們的銷售:
SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name;
這個查詢將為每個產品顯示總銷售量。這是發生了什麼:
- 我們 SELECT
product_name
和quantity_sold
的 SUM。 - 我們從
sales
表中獲取這些數據。 - 我們按
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;
這個查詢的作用如下:
- 按產品分組銷售。
- 為每個產品計算總銷售量。
- 將結果從最高到最低銷售量排序。
結果可能會像這樣:
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;
這個查詢:
- 按產品和日期分組銷售。
- 首先按產品名稱(字母順序)排序。
- 然後在每個產品組內按每日總計(最高到最低)排序。
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;
這個查詢:
- 按月份和產品分組銷售。
- 為每月的每個產品計算總銷售量。
- 按月份(升序)和總銷售量(降序)排序結果。
- 將輸出限制為每月前三個產品。
這就是 Group By 和 Order By 的全部內容!記住,熟練來自練習,所以不要害怕在你自己的查詢中嘗試這些子句。祝你 SQL 编程愉快,願你的數據總是井井有條且排序完美!
Credits: Image by storyset