Pull to refresh

Comments 4

Есть еще прикольные нюансы взаимодействия таких аналитических функций с case - when

Например если сделать что-то вот такое

Case column_flag when 'Y' then 0 else row_number ...

То мы вроде как ожидаем получить 0 для одного типа столбцов, и нумерацию с 1 для другого типа

Однако база сначала расставит row_number на всех строках, а потом обернет это в case-when.

В результате нумерация второго типа столбцов вполне может начаться не с 1 - ведь она началась уже внутри случаев, которые скрыты внутри обертки с case-when

Что делать в таком случае?

Например, явно добавить такое поле в условие партицирования этого row_number, то есть

Case column_flag when 'Y' then 0 else row_number()over(partition by column_flag, ...)

UFO landed and left these words here

Ну так это и правильно. Оконные функции обрабатывают весь набор либо всё текущее окно. С какого перепугу она бы стала из-за какого-то CASE обрабатывать только часть выходного набора?

Не то что "неправильно", просто может быть неочевидно, пока сам с этим не столкнешься

Sign up to leave a comment.

Articles