MySQL - 仅当所有行都不为null时才求和,否则返回null

use*_*803 9 mysql null sum rows

我们假设下表:

 X   VALUE
 1   2
 1   3
 2   NULL
 2   4
Run Code Online (Sandbox Code Playgroud)

我想要一个由X分组的结果集,其总和为VALUE,但前提是所有与每个X值相关的行都不为空.

使用相同的示例,结果必须是:

X   SUM(VALUE)
1   5
Run Code Online (Sandbox Code Playgroud)

如您所见,X=2由于(2, NULL)元组而未选中.

我希望,只要可能,不使用子查询.

非常感谢你!

Alm*_* Do 14

您可以通过以下方式实现:

SELECT 
  x, 
  SUM(value) 
FROM 
  t 
GROUP BY 
  x 
HAVING 
  COUNT(value)=COUNT(*)
Run Code Online (Sandbox Code Playgroud)

这将按以下方式工作:以正常方式对值进行分组,然后将整个计数(因此*指向该值)与列计数(不包括NULL-s)进行比较.如果他们不平等,那么就不NULL应该包括价值和价值.

  • +1 Nifty,为什么我没想到呢?:) (3认同)