讓我們在下表中假設:MySQL的 - 總和只有當所有的行不爲空,否則返回空
X VALUE
1 2
1 3
2 NULL
2 4
我想通過X與值之和分組的結果集,但只有當所有的行與每個X值相關的內容不爲空。
使用相同的例子,其結果必然是:
X SUM(VALUE)
1 5
正如你所看到的,X=2
是不是由於(2, NULL)
元組選擇。
我想,只要這是可能的,不使用子查詢。
非常感謝!
讓我們在下表中假設:MySQL的 - 總和只有當所有的行不爲空,否則返回空
X VALUE
1 2
1 3
2 NULL
2 4
我想通過X與值之和分組的結果集,但只有當所有的行與每個X值相關的內容不爲空。
使用相同的例子,其結果必然是:
X SUM(VALUE)
1 5
正如你所看到的,X=2
是不是由於(2, NULL)
元組選擇。
我想,只要這是可能的,不使用子查詢。
非常感謝!
可以實現與:
SELECT
x,
SUM(value)
FROM
t
GROUP BY
x
HAVING
COUNT(value)=COUNT(*)
這將工作方式如下:在正常的方式組值,但隨後比較整個計數(所以*指向)與列數(其中不包括NULL
-s)。如果它們不相等,則有NULL
,並且不應該包含該值。
該工作對子級:
SELECT SUM(value) FROM test WHERE value IS NOT NULL GROUP BY X
你檢查了你的答案嗎? – Sathish
這將從整個組中排除NULL,但在計算聚合結果時不會影響非空值 –
另一種方式是這樣的。這可能是也可能不是更快:
SELECT X, IF(SUM(VALUE is NULL), NULL, SUM(VALUE)) as value
FROM table_name
group by X
having not(null <=> value);
而且,用這種方法,如果你刪除你的所有行having子句,但空值與空值相加列,你則可以有條件去做別的事在你的腳本中。
+1 Nifty,至於爲什麼我沒有想到這一點? :) –
完美的工作,謝謝 – user3418803
我希望我可以upvote這兩次。謝謝,很好的答案 - 簡單但不明顯 – billynoah