mysql sum if列有特定值

ttygqcqt  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(388)

有没有办法只在行满足某些条件时求和?如果行不满足某些条件,则必须将它们复制到新表中。例如,如果我有这张table

| 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”是“c”,它只会复制值

jv4diomz

jv4diomz1#

你的例子并没有说明所有可能的情况。
但我认为也许你不需要把解决方案复杂化 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))
mlnl4t2r

mlnl4t2r2#

您可以在两个不同的select查询中执行此操作。在第一个select查询中,只考虑以下情况 A 具有值“a”或“b”。在第二个select查询中,考虑其余的值( 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

相关问题