MySQL SUM IF列具有特定值

路易斯·加西亚

是否只有在满足某些条件时才对行进行求和?,如果不行,则必须将它们复制到新表中。例如,如果我有这张桌子

| 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”仅将其值复制

Madhur bhaiya
  • 您可以在两个不同的Select查询中执行此操作。在第一个“选择”查询中,只需考虑A值“ a”或“ b”的情况。在第二个“选择”查询中,考虑其余的值(A NOT IN ('a','b')
  • 使用UNION ALL到的结果合并成一个派生表
  • 按升序对Derived表结果集进行排序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 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章