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, вы получите все строки, но с нулевыми значениями для суммированных столбцов с нулями, которые вы затем можете условно сделать что-то еще в своем скрипте.