条件排序优先于列

时间:2015-05-31 13:48:20

标签: mysql sql sql-order-by

我有一个包含4列的表格:

  1. 的ProductID
  2. IsSponsored
  3. 等级
  4. PopularityScore
  5. 我希望获得RankPopularityScore订购的前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订购的所有赞助商产品,然后按人气分数订购的非赞助商品进行补充。

1 个答案:

答案 0 :(得分:1)

在所有三个上尝试条件逻辑:

.prev()

第一个键是布尔值上的表达式:this计算结果为true(1)或false(0)。我从第三个密钥中删除了ORDER BY (IsSponsored = 1) DESC, (CASE WHEN IsSponsored = 1 THEN RANK END) ASC, PopularityScore DESC; ,因为它是多余的 - 如果您愿意,可以将其放回去。