选择每列具有不同WHERE条件的行的SUM

时间:2013-11-14 06:59:38

标签: mysql aggregate-functions

要么这不是一个好主意,要么是如此基础以至于我找不到它。假设我有一个像这样的表:

 User  |  Q1  | Q2 |  Q3
 ann   |  3   |  2 |  5
 joe   |  1   |  4 |  4
 joe   |  5   |  2 |  2
 ann   |  4   |  4 |  4

我想要的是一个查询,它返回每个用户每列的总和,如果特定列的值大于某个数字。所以在上面的例子中,结果将是:

 User  |  Q1  | Q2 |  Q3
 ann   |  7   |  4 |  9
 joe   |  5   |  4 |  4

如果每列最小值为3。但我知道,如果我尝试

WHERE Q1 >= 3 AND Q2 >= 3 AND Q3 >= 3

除非所有3个符合最小值,否则我不会得到总值。如果我使用

WHERE Q1 >= 3 OR Q2 >= 3 OR Q3 >= 3

我会得到所有想要的行,但会得到总计低于最小值的值。

这可以在一个查询中优雅地完成吗?

1 个答案:

答案 0 :(得分:3)

所以请使用IF

SELECT 
  SUM(IF(Q1>=3, Q1, 0)) AS Sum_Q1,
  SUM(IF(Q2>=3, Q2, 0)) AS Sum_Q2,
  SUM(IF(Q3>=3, Q3, 0)) AS Sum_Q3,
  user
FROM
  t
GROUP BY
  user