2

要么这不是一个好主意,要么它太初级以至于我找不到它。假设我有一个像这样的表:

 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

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

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

4

1 回答 1

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
于 2013-11-14T07:01:46.170 回答