优先于列的条件排序
Conditional ordering with priority to a column
我有一个包含 4 列的 table:
- 产品编号
- 已赞助
- 排名
- 人气得分
我想获得 Rank
和 PopularityScore
订购的前 20 名产品。但是,仅当 IsSponsored = 1
时才会考虑 Rank
。
我试过在 ORDER BY
子句中使用 CASE
。类似于:
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 获取 [=17 的行=] 按 PopularityScore
排序。
我想要的是获得按排名排序的所有赞助产品,然后辅以按人气得分排序的非赞助产品。
在所有三个上尝试条件逻辑:
ORDER BY (IsSponsored = 1) DESC,
(CASE WHEN IsSponsored = 1 THEN RANK END) ASC,
PopularityScore DESC;
第一个键是布尔表达式:计算结果为真 (1) 或假 (0)。我从第三个键中删除了 CASE
,因为它是多余的——如果你愿意,你可以把它放回去。
我有一个包含 4 列的 table:
- 产品编号
- 已赞助
- 排名
- 人气得分
我想获得 Rank
和 PopularityScore
订购的前 20 名产品。但是,仅当 IsSponsored = 1
时才会考虑 Rank
。
我试过在 ORDER BY
子句中使用 CASE
。类似于:
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 获取 [=17 的行=] 按 PopularityScore
排序。
我想要的是获得按排名排序的所有赞助产品,然后辅以按人气得分排序的非赞助产品。
在所有三个上尝试条件逻辑:
ORDER BY (IsSponsored = 1) DESC,
(CASE WHEN IsSponsored = 1 THEN RANK END) ASC,
PopularityScore DESC;
第一个键是布尔表达式:计算结果为真 (1) 或假 (0)。我从第三个键中删除了 CASE
,因为它是多余的——如果你愿意,你可以把它放回去。