用 case 表达式排序

order by with a case expression

我有一个复杂的 order bycase 表达式。

ORDER BY CASE WHEN field_1 = ? then 0 
              WHEN field_2 = ? then 1 ELSE 3 end ASC

我想按 field_3

对内部结果进行排序

例如我的 table 是 -

index | field_1 | field_2 | field_3
  0   |   car   |  red    |   2
  1   |   hat   |  red    |   5
  2   |   red   |  house  |   4

? = red

因此索引 0 和 1 将得到 1,索引 2 将从 case 表达式中得到 0。

我想按 field_3 再次订购,但只能在相同的值之间订购。

所以索引 0,1 应该 order by field_3

有什么建议可以实现吗?


结果应该是 -

索引 2 -> 索引 0 -> 索引 1

不确定我是否理解,但为什么不这样做

ORDER BY CASE WHEN field_1 = ? then 0 
              WHEN field_2 = ? then 1 ELSE 3 end ASC, field_3 ASC

如果两行或更多行的第一部分(CASE)相等,则这些行将按 field_3

排序

您还需要在 case 语句的 else 部分包含 field_3

ORDER BY 
  CASE 
    WHEN field_1 = 'red' then -2 
    WHEN field_2 = 'red' then -1 
    ELSE field_3 
  END, field_3

我使用负值以防万一 01field_3 列中的可能值。