比方说,我有一个像这样检索的电子邮件地址列表:
SELECT email FROM users ORDER BY email
返回:
a@email.com
b@email.com
c@email.com
...
x@email.com
y@email.com
z@email.com
我想获取此结果集,将底部的 3 封电子邮件切分并移至顶部,这样您会看到如下结果集:
x@email.com
y@email.com
z@email.com -- Note x-z is here
a@email.com
b@email.com
c@email.com
...
u@email.com
v@email.com
w@email.com
有没有办法在 SQL 中执行此操作?出于内存原因,我不想在应用程序端执行此操作。
最佳答案
如果您知道值是“x”或更大,您可以简单地执行以下操作:
order by (case when email >= 'x@email.com' then 1 else 2 end),
email
否则,您可以使用row_number()
:
select email
from (select email, row_number() over (order by email desc) as seqnum
from users u
) u
order by (case when seqnum <= 3 then 1 else 2 end),
email;
关于sql - PostgreSQL - 将底部的 N 个结果切片并将它们移动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29041993/