У меня есть таблица с 4-мя колонками:Условное упорядочение с приоритетом в колонке
- ProductID
- IsSponsored
- Ранг
- PopularityScore
Я хочу, чтобы получить 20 лучших продуктов по заказу от Rank
и PopularityScore
. Однако Rank
учитывается, только если IsSponsored = 1
. Я пробовал использовать CASE
в статье ORDER BY
. Что-то вроде:
SELECT ProductID
FROM ProductTable
ORDER BY
CASE WHEN IsSponsored = 1 THEN RANK END ASC,
CASE WHEN IsSponsored = 0 THEN PopularityScore END DESC
LIMIT 20;
Проблемы я столкнулся это, так как числа строк с IsSponsored = 0
>> числа строк с IsSponsored = 1
и пределом 20, MySQL извлекает строки с IsSponsored = 0
заказанных PopularityScore
. То, что я хочу, это получить от всех Спонсированных продуктов, заказанных по Ранкам, а затем дополненных не спонсируемыми продуктами, заказанными по рейтингу популярности.