是否只有在满足某些条件时才对行求和?,如果不行,则必须将它们复制到新表中。例如,如果我有这张桌子
| 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'仅会复制值
答案 0 :(得分:2)
A
的值为'a'或'b'的情况。在第二个“选择”查询中,考虑其余的值(A NOT IN ('a','b')
)UNION ALL
将结果合并为Derived Table。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
答案 1 :(得分:0)
您的示例并未显示所有可能的情况。
但是我认为您可能不需要使UNION
http://sqlfiddle.com/#!9/d473d3/6
SELECT id,
GROUP_CONCAT(A),
SUM(B)
FROM abc
GROUP BY CONCAT(id, IF(A IN ('a','b'),'$',A))