SQL: SUM() не работает, когда применяется неравное условие

#sql

Вопрос:

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

 SELECT sum(credit) from voucers where pay_action_id<>2

 ------------------------------ 
|debit | credit | pay_action_id|
 ------------------------------ 
|40.00 | 4.00   | null         |
 ------------------------------ 
|0.00  | 46.00  | 2            |
 ------------------------------ 
|0.00  | 34.00  | 1            |
 ------------------------------ 
|40.00 | 0.00   | null         |
 ------------------------------ 
 

результат: будет 38, если будет решено

Комментарии:

1. Отметьте свой вопрос только той базой данных, которую вы используете.

2. Удалены конфликтующие теги базы данных, пожалуйста, добавьте тот, который вы на самом деле используете!

Ответ №1:

Как и в большинстве других сравнений, <> отфильтровывайте NULL значения. Если они вам нужны, вам нужно их явно включить. Один из способов-это:

 SELECT sum(credit) 
FROM voucers 
WHERE pay_action_id <> 2 OR pay_action_id IS NULL;
 

Как в MySQL, так и в Postgres есть NULL безопасные операторы сравнения. Postgres поддерживает стандарт:

 WHERE pay_action_id IS DISTINCT FROM 2
 

В MySQL есть индивидуальный оператор:

 WHERE NOT (pay_action_id <=> 2)