Использование COALESCE для обработки нулевых значений в 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, как показано на прилагаемом изображении
однако я хочу заменить все нулевые значения на 0, используя COALESCE Пожалуйста, дайте мне знать, как это может быть достигнуто в выше SELECT query
теперь я дополнительно изменил запрос, используя 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.
Я все еще получаю одну строку с пустые значения
2 ответов
можно использовать COALESCE
в сочетании с NULLIF
для короткого, эффективного решения:
COALESCE( NULLIF(yourField,'') , '0' )
на NULLIF
функции вернет значение null, если yourField равно второму значению (''
в этом случае), делая COALESCE
функция полно работая на всех случаях:
QUERY | RESULT
---------------------------------------------------------------------------------
SELECT COALESCE(NULLIF(null ,''),'0') | '0'
SELECT COALESCE(NULLIF('' ,''),'0') | '0'
SELECT COALESCE(NULLIF('foo' ,''),'0') | 'foo'
если вы используете 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 = '';
это сделает присоединение и выбор существенно проще двигаться вперед.