首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL SELECT 進階選項全解析:ORDER BY、DISTINCT、彙總函數與 GROUP BY 實務應用

     編輯:關於SqlServer

承接基礎查詢教學,本文深入探討 SELECT 陳述式的核心修飾子句與關鍵字,掌握它們能讓您精準控制資料輸出形式與彙總邏輯。

核心選項分類速覽

類別關鍵字/子句功能
子句ORDER BY指定排序順序
子句GROUP BY分組彙總
關鍵字DISTINCT移除重複列
彙總函數COUNT計算符合列數
彙總函數AVG計算平均值
彙總函數SUM計算總和
彙總函數MIN最小非 NULL 值
彙總函數MAX最大值

ORDER BY — 靈活排序結果

語法:ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...

必須置於查詢語句末尾。預設遞增 (ASC),DESC 為遞減。

基本範例

-- 單欄排序
SELECT * FROM Contacts ORDER BY first_name;

-- 結合 WHERE 子句
SELECT first_name, last_name FROM Contacts
WHERE first_name BETWEEN 'a' AND 'k'
ORDER BY last_name;

多欄排序優先序

SELECT * FROM Contacts ORDER BY company, last_name, first_name;

優先序由左至右遞減:先依 company 排序,相同者再依 last_name,以此類推。

混合升降序

SELECT * FROM Sales
ORDER BY net_amount DESC, last_name, first_name;

net_amount 遞減 (金額高者優先),同金額則依姓名遞增排序。

排序欄位無需出現在 SELECT 清單

SELECT company, first_name, net_amount FROM Sales
ORDER BY start_date, last_name;

只要欄位存在於資料表即可作為排序依據。

DISTINCT — 移除重複列

作用於 整個 SELECT 清單,僅回傳唯一組合:

SELECT DISTINCT company FROM Sales;

注意:若 SELECT DISTINCT company, salesperson,同一公司不同業務員仍會分別列出。

彙總函數 — 單值統計

函數說明範例
COUNT(*)列總數 (含 NULL)SELECT COUNT(*) FROM Sales
COUNT(column)非 NULL 值計數SELECT COUNT(email) FROM Contacts
AVG(column)數值平均SELECT AVG(price) FROM Products
SUM(column)數值總和SELECT SUM(qty) FROM Orders
MIN(column)最小非 NULL 值SELECT MIN(hire_date) FROM Employees
MAX(column)最大值SELECT MAX(salary) FROM Employees

GROUP BY — 分組彙總

配合彙總函數,依指定欄位分組計算:

SELECT department, COUNT(*) AS emp_count, AVG(salary) AS avg_salary
FROM Employees
GROUP BY department;

鐵律:SELECT 清單中非彙總函數的欄位,必須出現在 GROUP BY 中。

進階:HAVING 過濾分組結果

SELECT department, AVG(salary) AS avg_salary
FROM Employees
GROUP BY department
HAVING AVG(salary) > 50000;

WHERE 過濾原始列,HAVING 過濾分組後的彙總結果。

綜合實戰範例

-- 找出每個業務員的總銷售額、平均單價、交易筆數,且總額超過 100 萬者
SELECT salesperson,
       SUM(amount) AS total_sales,
       AVG(amount) AS avg_deal,
       COUNT(*) AS deal_count
FROM Sales
WHERE year = 2024
GROUP BY salesperson
HAVING SUM(amount) > 1000000
ORDER BY total_sales DESC;

小結

ORDER BY 掌控輸出順序,DISTINCT 去重,彙總函數提供統計摘要,GROUP BY 實現分組分析。這些工具組合起來,能直接在資料庫層完成大部分報表邏輯,減少應用層處理負擔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved