[英]MySQL SUM IF column has specific value
有沒有辦法只在滿足某些條件時對行進行求和?,如果不是,則必須將它們復制到新表中。 例如,如果我有這個表
| 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'的情況。 在第二個Select查詢中,考慮其余值( A NOT IN ('a','b')
) UNION ALL
將結果合並到派生表中 。 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
您的示例未顯示所有可能的情況。
但我認為你可能不需要用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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.