Я пытаюсь вывести и пометить итоговое значение столбца из накопительного пакета.
select coalesce(column_1, 'Total') as coalesced_value,
sum(column_2) as column_sum
from table
where yada yada
group by rollup(coalesced_value)
order by coalesced_value
Запрос работает нормально и генерирует итоговое значение, как и ожидалось, но значение столбца, которое я ожидаю, будет равно «Всего».'отображается как [null].
Есть хороший шанс, что, вероятно, с моей стороны, возможно, не хватает понимания, но есть и то, что COALESCE в PostgreSQL нестандартно и делает меняинтересно, действительно ли это я.
Цитата:
COALESCE для типов строк
Спецификация определяет COALESCE (X, Y) как синтаксическое преобразование в CASE WHENX НЕ НЕДЕЛЕ, ЧЕМ X ДАЛЕЕ Y END (остается открытым вопрос о том, действительно ли X оценивается дважды, не допуская недетерминированных выражений или выражений с побочными эффектами в этом контексте).Следствием этого является то, что применяются довольно странные правила для пустых тестов типов строк.PostgreSQL применяет к X только тест «не является нулевым значением». Соответственно, если X - это значение строки, содержащее нулевые столбцы, PostgreSQL вернет X, в то время как спецификация потребует возврата Y.
(Прекрасное объяснение, верно?)
Я также натолкнулся на некоторую информацию, которая указывает на то, что типы данных COALESCE должны совпадать, в противном случае функция молча завершается сбоем.(!)
Я ожидаю, что строковый литерал 'Total' будет интерпретирован как varchar, а column_1 определен в базе данных как varchar (12), но на данный момент я не уверен в большей частичто угодно, и любая помощь будет наиболее ценной.