让我们假设下表:
X VALUE
1 2
1 3
2 NULL
2 4
我想要一个按X分组的结果集,其总和为VALUE,但前提是所有与每个X值相关的行都不为空。
使用相同的示例,结果必须是:
X SUM(VALUE)
1 5
如您所见,由于X=2
元组,未选择(2, NULL)
。
我希望,只要有可能,不使用子查询。
非常感谢!
答案 0 :(得分:13)
您可以通过以下方式实现这一目标:
SELECT
x,
SUM(value)
FROM
t
GROUP BY
x
HAVING
COUNT(value)=COUNT(*)
这将按以下方式工作:以正常方式对值进行分组,然后将整个计数(因此*指向该值)与列数(不包括NULL
- s)进行比较。如果它们不相等,则有NULL
个,并且不应包含值。
答案 1 :(得分:2)
另一种方式是这样的。它可能会或可能不会更快:
SELECT X, IF(SUM(VALUE is NULL), NULL, SUM(VALUE)) as value
FROM table_name
group by X
having not(null <=> value);
此外,使用此方法,如果删除having子句,则会获得所有行,但是对于带有空值的求和列的空值,您可以在脚本中有条件地执行其他操作。
答案 2 :(得分:-1)
这样可行:
SELECT SUM(value) FROM test WHERE value IS NOT NULL GROUP BY X