我有一个包含4列的表格:
我希望获得Rank
和PopularityScore
订购的前20个产品。但是,只有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
的行。
我想要的是获得Ranks订购的所有赞助商产品,然后按人气分数订购的非赞助商品进行补充。
答案 0 :(得分:1)
在所有三个上尝试条件逻辑:
.prev()
第一个键是布尔值上的表达式:this计算结果为true(1)或false(0)。我从第三个密钥中删除了ORDER BY (IsSponsored = 1) DESC,
(CASE WHEN IsSponsored = 1 THEN RANK END) ASC,
PopularityScore DESC;
,因为它是多余的 - 如果您愿意,可以将其放回去。