MySQL-Sum только если все строки не null, иначе возвращают null

предположим следующую таблицу:

 X   VALUE
 1   2
 1   3
 2   NULL
 2   4

мне нужен результирующий набор, сгруппированный по X с суммой значения, но только если все строки, связанные с каждым значением X, не являются нулевыми.

используя тот же пример, результат должен быть:

X   SUM(VALUE)
1   5

Как видите, X=2 Не выбрано из-за (2, NULL) кортежа.

Я хочу, когда это возможно, без использования подзапросов.

большое спасибо!

3 ответов


вы можете достичь этого с помощью:

SELECT 
  x, 
  SUM(value) 
FROM 
  t 
GROUP BY 
  x 
HAVING 
  COUNT(value)=COUNT(*)

Это будет работать следующим образом: групповые значения в обычном режиме, но затем сравните весь счетчик (так что * указывает на это) с количеством столбцов (которое не будет включать NULL - s). Если они не равны, то есть NULL ' S и значение не должны быть включены.


другой способ-это. Это может быть или не быть быстрее:

SELECT X, IF(SUM(VALUE is NULL), NULL, SUM(VALUE)) as value
FROM table_name
group by X
having not(null <=> value);

кроме того, с помощью этого метода, если вы удалите предложение having, вы получите все строки, но с нулевыми значениями для суммированных столбцов с нулями, которые вы затем можете условно сделать что-то еще в своем скрипте.

http://sqlfiddle.com#!2 / f769cc/18


Это должно работать:

SELECT SUM(value) FROM test WHERE value IS NOT NULL GROUP BY X