我有一个复杂的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
答案 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
列中的值1
或field_3
,我使用了负值。