要么这不是一个好主意,要么是如此基础以至于我找不到它。假设我有一个像这样的表:
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
我会得到所有想要的行,但会得到总计低于最小值的值。
这可以在一个查询中优雅地完成吗?
答案 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