首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL GROUP BY 分組彙總語法與實戰範例

     編輯:MySQL 資料庫相關知識

GROUP BY 結合彙總函數(SUM、COUNT、AVG 等),將資料依指定欄位分組統計。本文說明語法結構、兩個實戰範例(遊戲統計、勝負統計)、PHP 應用寫法。

基本語法結構

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE condition
GROUP BY column_name

範例一:遊戲統計(多欄位 SUM)

原始資料:

gameidbesttopspam
111111
121110
123011
111101

查詢:

SELECT gameid,
       SUM(best) AS bestcnt,
       SUM(top) AS topcnt,
       SUM(spam) AS spamcnt
FROM game_table
GROUP BY gameid

結果:

gameidbestcnttopcntspamcnt
111212
121110
123011

範例二:每日勝負統計(條件彙總)

原始資料:

日期勝負
2009-12-09勝
2009-12-09勝
2009-12-09負
2009-12-09負
2009-12-10負
2009-12-10勝
2009-12-10負

Oracle/通用寫法(使用 DECODE/CASE):

SELECT 日期,
       SUM(CASE WHEN 勝負 = '勝' THEN 1 ELSE 0 END) AS 勝,
       SUM(CASE WHEN 勝負 = '負' THEN 1 ELSE 0 END) AS 負
FROM 統計表
GROUP BY 日期

結果:

日期勝負
2009-12-0922
2009-12-1012

PHP 程式碼整合範例

$sql = "SELECT gameid,
               SUM(best) AS best,
               SUM(top) AS top,
               SUM(spam) AS spam
        FROM tablename
        GROUP BY gameid
        ORDER BY gameid ASC";

$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result)) {
    echo "GameID: {$row['gameid']}, Best: {$row['best']}, Top: {$row['top']}, Spam: {$row['spam']}
"; }

進階技巧

  • HAVING:分組後過濾(如 HAVING COUNT(*) > 5)
  • ROLLUP / CUBE:產生小計/總計列(支援度視資料庫而定)
  • GROUPING SETS:自訂多層分組組合(SQL Server、Oracle、PostgreSQL)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved