У меня в таблице есть 4 столбца: customer, product_id, Score, tag. В столбце тега 'new' и 'old' есть 2 значения.
, для каждого клиента есть оба product_id из 'new' и 'Старый тег (число варьируется) для каждого клиента, мы ранжируем product_id на основе оценки, а у тега у нас есть общее ограничение на количество продуктов для каждого клиента.он называется 'n_prod'
Я надеюсь выбрать (2/3 * n_prod) product_id из тега "old" и (1/3 * n_prod) продукт для тега "new" для каждого клиента, например, если нам нужновыберите 6 товаров, надеюсь, у меня будет 4 из «старого» тега (топ 4 по количеству баллов) и 2 из «нового» тега (топ 2 по баллам)
Я могу создать столбецвызываемый 'rn' использует следующую команду для ранжирования product_id на основе каждого клиента и тега
select customer, product_id, score, tag
, row_number()over(partition by customer,tag, order by score desc) as rn
from table
количество ограничений различно для разных групп: пробовал это, но не работает:
with tep as
(select customer, product_id, score, tag
, row_number()over(partition by customer,tag, order by score desc) as rn
from table)
select tep.*
from tep
where ( case
when tag='new' then rn<= round(n_prod*0.33,0)
else then rn<= round(n_prod*0.66,0)
end
);
Могу ли я объединить «где» с «случаем, когда» или «если еще»?
пересчитать ожидаемый результат: я надеюсь выбрать (2/3 * n_prod) product_id из тега «old» и (1/ 3 * n_prod) продукт для «нового» тега для каждого клиента, например, если нам нужно выбрать 6 продуктов, надеемся, что у нас будет 4 из «старого» тега (топ-4 по количеству баллов) и 2 из «нового» тега (2 лучших на основе оценки)