用 case 表达式排序
order by with a case expression
我有一个复杂的 order by
和 case
表达式。
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
我使用负值以防万一 0
或 1
是 field_3
列中的可能值。
我有一个复杂的 order by
和 case
表达式。
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
我使用负值以防万一 0
或 1
是 field_3
列中的可能值。