меня идет select query, который возвращает число. Как мне прокрутить это число в case … when statement? Хочу проверить это число на диапазон и установить соответсвующее значение для колонки:
case (query) when > 1 and <5 then 'case1' when >5 and < 10 then 'b' else 'c' end as "colomnName"
попробуй подзапрос в join пихнуть. если нужны данные из основного запроса - используй lateral но вообще это странное желание, кмк
Да можно этот квери в каждый when впихнуть, просто думал может как-нибудь можно результат этого запроса в отдельную константу вынести и ее проверять, чем весь запрос во все when случаи вставлять
Просто как под запрос вставь, и всё
select case b.col_name when cond then val end from table_1 a, lateral ( подзапрос ) b
Case (select val from xxx....) When 1 then 'one' When 42 then 'the answer' else 'who knows' end
у него упирается в то что он вхождение в диапазон хочет проверять
Можно перечислить несколько значений, либо использовать другую форму case, повторяя в каждом подзапрос
Можно конечно. Вариантов много разных. Нужно будет посмотреть в планировщике, какой вариант меньше стоит.
Подзапрос не будет выполняться 20 раз.
Можно так: select (with subq as (подзапрос) select case when (table subq) >1 and (table subq) < 5 /*лично я бы применил between 2 and 4, если там целые числа*/ then 'case1' when (table subq) >5 and (table subq) <10 then 'b' else 'c' end ) as "columnName" from ...
хотите сказать что если подзапрос в каждом where прописан и в подзапросе участвуют колонки из запроса то подзапрос выполнится один раз ?
зависит от подзапроса. планировщик должен постараться оптимизировать
Да, одинаковые подзапросы выполнятся один раз. Если подзапрос коррелированный, то по одному разу на запись родительского. Это классика оптимизаций для оптимизаторов, все должны уметь.
Обсуждают сегодня