【问题标题】:Different order depending on condition根据条件不同的顺序
【发布时间】:2016-11-01 04:41:30
【问题描述】:

我有一个包含 3 列的“产品”表:

id (int)
priority (1 or 0)
price (int)

在我按优先顺序订购产品后,我想按价格订购这两个子集。优先级 = 1 的子集按升序价格计算,优先级 = 0 的子集按降序价格计算。 我尝试过这样的事情:

SELECT * FROM product ORDER BY priority DESC, CASE priority = 1 THEN price END ASC, CASE priority = 0 THEN price END DESC

但我尝试的任何方法似乎都不起作用。 关于如何解决这个问题的任何想法? TIA

【问题讨论】:

    标签: mysql sql-order-by


    【解决方案1】:

    您的CASE 语法中缺少WHEN。这有效:

    SELECT * FROM product
    ORDER BY priority DESC,
    CASE WHEN priority = 1 THEN price END ASC,
    CASE WHEN priority = 0 THEN price END DESC;
    

    更简单的方法是运行两个查询,每个优先级一个,并使用UNION 组合结果集:

    SELECT * FROM product WHERE priority = 1 ORDER BY price ASC
    UNION ALL
    SELECT * FROM product WHERE priority = 0 ORDER BY price DESC
    

    【讨论】:

    • 可以使用条件表达式在单个查询中执行此操作,但是,联合是一种更快、更简单的解决方案。
    • 感谢您的及时答复!
    • @Shadow 是的,你是对的。似乎也可以使用 order by 和条件表达式来实现这一点。我将编辑我的答案并将其添加为另一种方法,只是为了演示正确的语法,因为 Philip 在他的问题中几乎是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2022-09-22
    相关资源
    最近更新 更多