MySQL SUM IF 列具有特定值

标签 mysql sum

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

| 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将结果组合成 Derived Table .
  • 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 

关于MySQL SUM IF 列具有特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52669721/

相关文章:

php - 将 LIKE 与多个 WHERE 子句结合使用

Mysql为选择添加新列

sql - 使用多个 JOINS。 SUM() 产生错误值

python - 将整数中的奇数位相加

php - Laravel 单元测试

php - 我创建了一个 html 提交按钮并与 php 代码连接,但是选择该按钮后如何返回我的 html 页面?

php - 在mysql中插入特殊字符?

matlab - 使用 SUM 和 UNIQUE 计算矩阵子集中值的出现次数

c - 我在 for 循环内使用 if -else 求和数组中的奇数时遇到问题

php - Mysql select max 最大总和值