首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MySQL 分組聚合:按日期+型號彙總數量、GROUP_CONCAT 合併標號

     編輯:程式設計疑難解答

需求

原始表:`日期`、`標號`、`型號規格`、`數量`。
目標:同日期、同型號合併 → `日期`、`標號(逗號分隔)`、`型號規格`、`數量(SUM)`。

SQL 方案

SELECT 
    `日期`,
    GROUP_CONCAT(`標號` ORDER BY `標號` SEPARATOR ',') AS `標號`,
    `型號規格`,
    SUM(`數量`) AS `數量`
FROM `your_table`
GROUP BY `日期`, `型號規格`
ORDER BY `日期`, `型號規格`;

關鍵函數

  • `GROUP_CONCAT(expr ORDER BY ... SEPARATOR ',')`:分組內字符串聚合,預設分隔符 `,`,可指定排序。
  • `SUM()`、`COUNT()` 等聚合函數配合 `GROUP BY`。

注意事項

  • `group_concat_max_len` 系統變量默認 1024 字節,結果過長會截斷。需調大:
    `SET SESSION group_concat_max_len = 1000000;`
  • 若 `標號` 含 NULL,`GROUP_CONCAT` 會忽略 NULL;若需保留,可 `COALESCE(標號, 'NULL')`。
  • 嚴格 SQL 模式(`ONLY_FULL_GROUP_BY`)下,SELECT 列必須出現在 GROUP BY 或聚合函數中。

擴展:多維度彙總

SELECT 
    `日期`,
    `型號規格`,
    SUM(`數量`) AS 總數量,
    GROUP_CONCAT(DISTINCT `標號` ORDER BY `標號`) AS 標號列表,
    COUNT(DISTINCT `標號`) AS 批次數
FROM `t`
GROUP BY `日期`, `型號規格`;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved