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

SQL GROUP BY 子句完整指南:核心原則與常見誤區

     編輯:關於SqlServer

GROUP BY 是 SQL 分組查詢的核心,通常搭配聚合函數(COUNT、SUM、AVG 等)使用。許多開發者在初學時容易誤解:分組後「非聚合欄位」該如何顯示?本文透過具體範例釐清核心原則。

為什麼需要聚合函數?

假設資料如下:

AB
1abc
1bcd
1asdfg

若執行 SELECT A, B FROM table GROUP BY A,資料庫無法決定 B 欄位該顯示 abc、bcd 還是 asdfg,因為同一群組內有多個不同值。因此必須用聚合函數將多值「縮減」為單一值:

SELECT A, COUNT(B) AS 數量 FROM table GROUP BY A;

結果:

A數量
13

鐵律:SELECT 清單中的非聚合欄位,必須出現在 GROUP BY 之後

這是 ANSI SQL 標準,也是避免邏輯錯誤的關鍵。若 SELECT 含有未聚合的欄位 C,則 GROUP BY 必須包含 C,否則查詢將報錯或產生不確定結果(視資料庫實作而定)。

實務建議

  • 先決定「群組鍵」,再決定「聚合指標」。
  • 若需保留明細資料,考慮使用視窗函數(ROW_NUMBER() OVER (PARTITION BY ...))而非 GROUP BY。
  • 搭配 HAVING 過濾群組,而非 WHERE(WHERE 作用於分組前)。

掌握此原則,即可撰寫正確、高效的分組查詢。

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