安全程序员

PrestoSQL中如何实现类似order by field

我们在知道MySQL里面如果使用Where in后还需要保持原有的顺序,需要使用order by field的语法,例如:

SELECT * FROM mytable WHERE id IN (3,2,1,4) ORDER BY FIELD(id,3,2,1,4)

但是在PrestoSQL中并没有order by field的语法,因此如何才能实现同样的效果呢?

select
    arbitrary(id)
    ,count(1)
from
    mytable
    join (
        values (1, 3), (2, 2), (3, 1), (4, 4)
    ) v (idx, val) on mytable.id = v.val
group by v.idx
order by v.idx
;

这里我们使用values构造了一个有顺序的临时表,然后order by的时候按照这个临时表进行排序即可。

退出移动版