mysql - 使用行合并进行聚合

标签 mysql sql

我有一个表 my_table,其中包含列 state、month、ID 和 sales。

我的目标是将具有相同状态、月份、ID 的不同行合并为一行,同时将这些选定行的销售列汇总到合并行中。

例如:

state    month    ID    sales
-------------------------------
FL       June     0001   12,000
FL       June     0001    6,000
FL       June     0001    3,000
FL       July     0001    6,000
FL       July     0001    4,000
TX       January  0050    1,000
MI       April    0032    5,000
MI       April    0032    8,000
CA       April    0032    2,000

这是我应该得到的

state    month    ID    sales
-------------------------------
FL       June     0001   21,000
FL       July     0001   10,000  
TX       January  0050   1,000
CA,MI    April    0032   15,000

最佳答案

你需要为此使用 GROUP_CONCAT:

SELECT GROUP_CONCAT(DISTINCT State) AS State
 , Month, ID, SUM(Sales)
FROM Table1
GROUP BY Month, ID;

参见this SQLFiddle


更新(针对 SQL Server)

对于 SQL Server,您可以为此使用 STUFF():

SELECT  state = 
    STUFF((SELECT DISTINCT ' , ' + state
           FROM Table1 b 
           WHERE b.ID = a.ID
             AND b.month = a.month
          FOR XML PATH('')), 1, 2, '')
    ,month, ID, SUM(sales) AS Sales
FROM Table1 a
GROUP BY month,ID;

参见this SQLFiddle

关于mysql - 使用行合并进行聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18909855/

相关文章:

mysql - SQL 连接 : group with order

mysql - 使用 Xampp 的 mysql for java jdbc 程序

MySQL 删除子查询需要数百秒,而选择查询成本要低得多

php - MySQL 表/查询设计 - 一项的倍数,许多评论

sql - 克隆数据库并进行备份可能吗?

MySQL DELETE FROM 以子查询为条件

php - 将 PHP 变量传递给 MySQL 数据库

php - 添加mysql查询到virtualmart

mysql - SQL查询优化,如果第一个为空则按其他行排序

sql:如何选择字段设置为0的所有记录并将该字段的值设置为1