Использование COALESCE для обработки значений NULL в PostgreSQL
У меня есть следующий запрос
SELECT DISTINCT
pt.incentive_marketing,
pt.incentive_channel,
pt.incentive_advertising
FROM test.pricing pt
WHERE pt.contract_id = 90000
group by 1,2,3
order by pt.incentive_marketing;
Вышеприведенный запрос возвращает o/p, как показано на прилагаемом изображении
![enter image description here]()
Однако я хочу заменить все нулевые значения на 0, используя COALESCE
Пожалуйста, дайте мне знать, как это может быть достигнуто в предыдущем запросе SELECT
Теперь я дополнительно изменил запрос, используя coalesce, как показано ниже
SELECT
COALESCE( pt.incentive_marketing, '0' ),
COALESCE(pt.incentive_channel,'0'),
COALESCE( pt.incentive_advertising,'0')
FROM test.pricing pt
WHERE pt.contract_id = 90000
group by 1,2,3
результат которого указан на рисунке 2.
Я все еще получаю одну строку с пустыми значениями
![]()
Ответы
Ответ 1
Вы можете использовать COALESCE
в сочетании с NULLIF
для короткого, эффективного решения:
COALESCE( NULLIF(yourField,'') , '0' )
Функция NULLIF
будет возвращать значение null, если вашField равен второму значению (''
в этом случае), делая COALESCE
полностью работает во всех случаях:
QUERY | RESULT
---------------------------------------------------------------------------------
SELECT COALESCE(NULLIF(null ,''),'0') | '0'
SELECT COALESCE(NULLIF('' ,''),'0') | '0'
SELECT COALESCE(NULLIF('foo' ,''),'0') | 'foo'
Ответ 2
Если вы используете 0
и пустую строку ''
и null
для обозначения undefined, у вас есть проблема с данными. Просто обновите столбцы и исправьте свою схему.
UPDATE pt.incentive_channel
SET pt.incentive_marketing = NULL
WHERE pt.incentive_marketing = '';
UPDATE pt.incentive_channel
SET pt.incentive_advertising = NULL
WHERE pt.incentive_marketing = '';
UPDATE pt.incentive_channel
SET pt.incentive_channel = NULL
WHERE pt.incentive_marketing = '';
Это сделает соединение и выбор значительно легче двигаться вперед.