用案例表达式排序

时间:2019-01-08 13:57:15

标签: sql sqlite case-expression

我有一个复杂的order by,表达式为case

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

我想按field_3

对内部结果进行排序

例如我的桌子是-

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

? = red

因此case表达式中的索引0和1将为1,索引2将为0。

我想再次按field_3进行排序,但是该顺序应该只在相同的值之间。

因此索引0,1应该order by field_3

任何建议如何实现这一目标?


结果应为-

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

2 个答案:

答案 0 :(得分:2)

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

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

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

排序

答案 1 :(得分:1)

您还需要在其他部分的case语句中包括field_3

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

为了避免0列中的值1field_3,我使用了负值。