有没有办法只在满足特定条件时才对行求和?如果不满足,则必须将它们复制到新表中。例如,如果我有这张表
| 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”,它只会复制值
最佳答案
- 您可以在两个不同的 Select 查询中执行此操作。在第一个 Select 查询中,只考虑
A
具有值“a”或“b”的情况。在第二个 Select 查询中,考虑其余值 (A NOT IN ('a','b')
) - 使用
UNION ALL
将结果组合成 Derived Table . - 按
id
升序排列 Derived 表结果集。 - 我们使用像
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
关于MySQL SUM IF 列具有特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52669721/