如何在SQL查询中设置条件逻辑以改变优先级?

Rom*_*gan 4 sql oracle sql-order-by

如何在SQL查询中设置条件逻辑以改变优先级?

例如,如果我有像"id","name","event_id"这样的列的表,并且我有不同的"event_id",如180,181,270,271,我需要以"event_id"的方式排序270将位于顶部,然后是具有"even_id"271的行,其余数据将按"id"列按降序排序.

zer*_*kms 13

使用CASE语句来做你想要的订单

ORDER BY
CASE
    WHEN event_id = 270 THEN 0
    WHEN event_id = 271 THEN 1
    ELSE 2
END,
id DESC
Run Code Online (Sandbox Code Playgroud)


Jef*_*emp 8

我更喜欢CASE:

ORDER BY CASE event_id WHEN 270 THEN 0
                       WHEN 271 THEN 1
         END NULLS LAST,
         id DESC;
Run Code Online (Sandbox Code Playgroud)

但有时我会使用DECODE,这有点不那么罗嗦:

ORDER BY DECODE(event_id, 270, 0,
                          271, 1,
                          2),
         id DESC;
Run Code Online (Sandbox Code Playgroud)