@Dianalilika

Как проранжировать данные таким образом, чтобы не менялся номер по определенному условию?

У меня есть таблица:
66f1e5b7e4d69155828121.jpeg

Мне нужно проставить ранг так, чтобы порядковый номер не увеличивался если в столбце flag присутствуют значения
66f1e74bbde85826005225.jpeg

Я пишу такой запрос, думая, что он мне оставит пустоту если в поле flag есть значения, а остальное проранжирует по порядку, но он мне выдает не тот результат, что нужно:

select *
,case when length(flag) > 0 then null else DENSE_RANK() over (PARTITION by user_id ORDER by product_id) end as rank
from table_1

В идеале мне нужно чтобы порядковый номер просто не увеличивался, если в поле flag есть значения.
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
WITH cte AS (
  SELECT *,
         SUM((flag IS NULL) :: INT) OVER (PARTITION BY user_id ORDER BY product_id ASC) grp
  FROM test
  )
SELECT product_id, user_id, flag,
       DENSE_RANK() OVER (PARTITION BY user_id ORDER BY grp ASC) "rank"
FROM cte
ORDER BY 1,2;

fiddle
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы