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

SQL 實現分組彙總與自訂排序:以 index=2 為例

     編輯:關於SqlServer

問題情境

給定一張表 tab,欄位包含 id、in、out、index (皆為 integer)。需求如下:

  1. 篩選 index = 2 的資料。
  2. 相同 id 的資料合併,in、out 欄位分別加總。
  3. 結果依 in + out 總和由大到小排序。

資料樣本

idinoutindex
110122
2982
31283
1993
11203
25182
22002

解決方案

標準 SQL 聚合查詢即可滿足:

SELECT 
    id,
    SUM([in]) AS [in],      -- in 是保留字,需加方括號或雙引號
    SUM([out]) AS [out]     -- out 同理
FROM tab
WHERE [index] = 2           -- index 也是保留字
GROUP BY id
ORDER BY (SUM([in]) + SUM([out])) DESC;
-- 或簡寫:ORDER BY [in] + [out] DESC (別名在 ORDER BY 可用)

執行邏輯解析

  1. WHERE:先過濾 index = 2,剩 id 1、2 的共 4 筆。
  2. GROUP BY id:將 4 筆按 id 分為兩組 (id=1 有 1 筆,id=2 有 3 筆)。
  3. SUM():各組內 in、out 分別加總。
    • id=1:in=10, out=12 → 總和 22
    • id=2:in=9+5+20=34, out=8+18+0=26 → 總和 60
  4. ORDER BY ... DESC:依總和降冪排序,id=2 (60) 在前,id=1 (22) 在後。

預期結果

idinout
23426
11012

注意事項與優化

  • 保留字跳脫:in、out、index 皆為 SQL 保留字,務必使用方括號 [] (SQL Server) 或雙引號 "" (標準/PostgreSQL) 包裹。
  • 索引建議:在 (index, id) 上建立複合索引,可加速篩選與分組。
  • 大數據量:若資料量極大,考慮先篩選到暫存表再聚合,或使用分區表。

總結

善用 WHERE 篩選、GROUP BY 分組、SUM() 聚合、ORDER BY 排序四大基礎子句組合,即可輕鬆解決此類「分組彙總 + 自訂排序」的經典報表需求。

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