假设我有一张桌子:
col1, col2, col3
1 0 1.3
0 0 0
0 1 0
1 1.5 1
现在,假设每行的“权重”计算如下:
(col1 > 0 ? 1 : 0) + (col2 > 0 ? 1 : 0) + (col3 > 0 ? 1 : 0)
如何选择所有行的总重量?
根据我给出的数据,总重量是2 + 0 + 1 + 3 = 6
答案 0 :(得分:5)
您只需要一个聚合SUM()
围绕所有条件,而不是GROUP BY
。
SELECT
SUM(
(CASE WHEN col1 > 0 THEN 1 ELSE 0 END)
+ (CASE WHEN col2 > 0 THEN 1 ELSE 0 END)
+ (CASE WHEN col3 > 0 THEN 1 ELSE 0 END)
) AS total_weight
FROM your_table
http://sqlfiddle.com/#!2/b0d82/1
我在这里使用CASE WHEN...
,因为它可以在任何RDBMS上移植。由于MySQL会为条件返回布尔值0或1,因此可以在MySQL中简化为:
SELECT
SUM(
(col1 > 0) /* returns 1 or 0 */
+ (col2 > 0)
+ (col3 > 0)
) AS total_weight
FROM your_table