【问题标题】:Case when SQL prioritySQL 优先级的情况
【发布时间】:2022-11-16 10:33:59
【问题描述】:

我正在尝试进行查询,其中优先级列 > 0 的记录可以按 ASC 优先级排序,优先级列为 0 的记录按 ID DESC 排序。

我这样做的方式有效,但 DESC id 排序比优先级顺序列在第一位。因此,优先级为 0 的记录最先出现。如何让有优先权的记录优先?

看代码

select * from registros ORDER BY CASE WHEN prioridade > 0 THEN prioridade END ASC, id DESC

【问题讨论】:

    标签: sql


    【解决方案1】:

    您可以在此处使用两级排序:

    SELECT *
    FROM registros
    ORDER BY
        CASE WHEN prioridade > 0 THEN 0 ELSE 1 END,
        CASE WHEN prioridade > 0 THEN prioridade ELSE -1*prioridade END;
    

    【讨论】:

      【解决方案2】:

      假设你想要这样的东西 -

      Priority Id
      1 5
      2 4
      3 1
      0 3
      0 2

      您需要更改您的 case 语句,以便在按优先级升序排序时保证优先级为 0 的记录排在最后。最简单的方法是将优先级 0 的排序值硬编码为高于最高优先级的某个值(例如 999)

      SELECT * 
      FROM registros  
      ORDER BY  
          CASE WHEN prioridade = 0 THEN 999 ELSE prioridade END ASC,
          id DESC
      

      【讨论】:

        猜你喜欢
        • 2015-03-07
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        • 1970-01-01
        • 2010-09-08
        相关资源
        最近更新 更多