
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表資料
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 鍵
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 備選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY 與 ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - GROUP BY 與 ORDER BY
在 SQL 中,我們有兩個常用的子句可以幫助我們操作資料:GROUP BY 子句和 ORDER BY 子句。
GROUP BY 子句用於將相同的資料/記錄排列成組,而 ORDER BY 子句用於按升序或降序對資料進行排序。
SQL GROUP BY 子句
使用GROUP BY 子句,我們可以將表中的資料組織成組(基於某一列),並在其上執行所需的計算。
此子句通常與聚合函式一起使用,例如 MIN()、MAX()、SUM()、AVG() 和 COUNT() 等。
它通常與 SELECT 語句一起使用,並位於 WHERE 子句之後或 HAVING 子句之前。如果我們使用 ORDER BY 子句,則 GROUP BY 子句應該放在 ORDER BY 子句之前。
語法
以下是 SQL GROUP BY 子句的語法:
SELECT column_name, aggregate_function() FROM table_name WHERE condition GROUP BY column_name;
上述語法中的aggregate_function()和WHERE子句是可選的。
示例
假設我們已經建立了一個名為CUSTOMERS的表,其中包含客戶的記錄,例如 NAME、AGE、ADDRESS 和 SALARY 等,使用以下 CREATE 語句:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
現在,我們使用 INSERT 語句將值插入此表,如下所示:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00), (2, 'Khilan', 25, 'Delhi', 1500.00), (3, 'Kaushik', 23, 'Kota', 2000.00), (4, 'Chaitali', 25, 'Mumbai', 6500.00), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
CUSTOMERS 表將建立為:
ID | 姓名 (NAME) | 年齡 (AGE) | 地址 (ADDRESS) | 薪水 (SALARY) |
---|---|---|---|---|
1 | Ramesh | 32 | 32 | 2000.00 |
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
5 | Kaushik | 27 | 23 | 8500.00 |
6 | Kota | 22 | 20000 | 4500.00 |
7 | Chaitali | 24 | 28 | 10000.00 |
在下面的 SQL 查詢中,我們使用 Group by 子句根據 CUSTOMERS 表中的薪水對行進行分組,並計算每個組中的記錄數:
SELECT SALARY, COUNT(SALARY) from CUSTOMERS GROUP BY SALARY;
輸出
當我們執行上述查詢時,將顯示以下結果:
薪水 (SALARY) | 最大薪水 (MAX(SALARY)) |
---|---|
2000.00 | 2 |
1500.00 | 1 |
6500.00 | 1 |
8500.00 | 1 |
4500.00 | 1 |
10000.00 | 1 |
SQL ORDER BY 子句
ORDER BY 子句用於對查詢結果進行排序。此子句用於 SELECT 語句的末尾,位於 WHERE、HAVING 和 GROUP BY 子句之後。我們可以透過指定排序順序為 ASC 和 DESC 分別按升序或降序對錶列進行排序。如果我們沒有指定任何順序,則預設為升序。
語法
以下是使用 SQL ORDER BY 子句按升序/降序對列值進行排序的語法:
SELECT column_name FROM table_name ORDER BY ASC/DSC;
示例
在下面的查詢中,我們從 CUSTOMERS 表中檢索 ID 和 NAME,並使用 ORDER BY 子句按升序對名稱進行排序。
SELECT ID, NAME FROM CUSTOMERS ORDER BY NAME;
輸出
當我們執行上述查詢時,我們可以看到結果表按名稱升序排序。
ID | 姓名 (NAME) |
---|---|
4 | Delhi |
5 | Kaushik |
3 | Khilan |
2 | Ahmedabad |
6 | Kota |
7 | Chaitali |
1 | Ramesh |
示例
在下面的示例中,我們檢索 NAME,計算 AVG SALARY,並使用 GROUP BY 子句按 NAME 對錶進行分組。
SELECT NAME, AVG(SALARY) FROM CUSTOMERS GROUP BY NAME;
輸出
當我們執行上述查詢時,我們將獲得姓名和平均薪水。平均薪水與實際薪水相同,因為沒有兩個或兩個以上的記錄具有相同的姓名。因此,平均薪水與實際薪水相同,並且表按名稱分組,如下表所示。
姓名 (NAME) | 平均薪水 (AVG(SALARY)) |
---|---|
Ramesh | 2000.000000 |
Ahmedabad | 1500.000000 |
Khilan | 2000.000000 |
Delhi | 6500.000000 |
Kaushik | 8500.000000 |
Kota | 4500.000000 |
Chaitali | 10000.000000 |
示例
在下面的示例中,我們檢索 NAME、AGE 和 SALARY,並使用 ORDER BY 子句按 AGE 升序排序。
SELECT NAME, AGE, SALARY FROM customers ORDER BY AGE;
輸出
上述查詢生成的表如下所示:
姓名 (NAME) | 年齡 (AGE) | 薪水 (SALARY) |
---|---|---|
Kota | 22 | 4500.00 |
Khilan | 23 | 2000.00 |
Chaitali | 24 | 10000.00 |
Ahmedabad | 25 | 1500.00 |
Delhi | 25 | 6500.00 |
Kaushik | 27 | 8500.00 |
Ramesh | 32 | 2000.00 |
GROUP BY vs ORDER BY
下表總結了 GROUP BY 子句和 ORDER BY 子句之間的區別:
序號 (S.No.) | GROUP BY | ORDER BY |
---|---|---|
1 | 它用於對具有相同值的行的分組。 |
它按升序或降序對列進行排序。 |
2 | 它可以在 create view 語句中使用。 |
它不允許在 create view 語句中使用。 |
3 | 在 GROUP BY 語句中,屬性不能分配給聚合函式。 |
在 ORDER BY 語句中,屬性可以分配給聚合函式。 |
4 | 在 select 語句中,它始終位於 ORDER BY 子句之前。 |
在 select 語句中,它始終位於 GROUP BY 子句之後。 |
5 | 此處基於行屬性值之間的相似性進行分組。 |
此處,結果集按列屬性值(升序或降序)排序。 |
6 | 它控制行的顯示。 |
它控制列的顯示。 |
7 | 我們可以在 GROUP BY 中使用聚合函式。 |
在 ORDER BY 中,不需要使用聚合函式。 |