簡體   English   中英

MySQL SUM IF列具有特定值

[英]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'值

  • 您可以在兩個不同的Select查詢中執行此操作。 在第一個Select查詢中,只考慮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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM