是否只有在满足某些条件时才对行进行求和?,如果不行,则必须将它们复制到新表中。例如,如果我有这张桌子
| id | A | B |
--------------
| 1 | a | 2 |
| 1 | b | 4 |
| 1 | c | 1 |
| 2 | a | 4 |
| 3 | a | 1 |
| 3 | b | 5 |
我想要这样的输出
| id | A | B |
--------------
| 1 | a,b | 6 |
| 1 | c | 1 |
| 2 | a | 4 |
| 3 | a,b | 6 |
仅当列“ A”为“ a”或“ b”时才求和,如果列“ c”仅将其值复制
A
值“ a”或“ b”的情况。在第二个“选择”查询中,考虑其余的值(A NOT IN ('a','b')
)UNION ALL
到的结果合并成一个派生表。id
。Group_concat()
和的聚合函数Sum()
来获取逗号分隔的字符串(对于a和b)以及B
值的总和。请尝试以下操作:
SELECT dt.*
FROM
(
SELECT id,
GROUP_CONCAT(DISTINCT A) AS A,
SUM(B) AS B
FROM your_table
WHERE A IN ('a','b')
GROUP BY id
UNION ALL
SELECT id,
A,
B
FROM your_table
WHERE A NOT IN ('a', 'b')
GROUP BY id, A, B
) AS dt
ORDER BY dt.id ASC
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句