sql - PostgreSQL - 将底部的 N 个结果切片并将它们移动到顶部

标签 sql postgresql sql-order-by

比方说,我有一个像这样检索的电子邮件地址列表:

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/

相关文章:

sql - 选择具有特定类型关联记录的记录

java - rs.getGeneratedKeys() 在 Derby 中不起作用

Mysql搜索、快速回复问题

mysql - 使用 Order By 的慢 SQL 查询

c# - Linq Complex OrderBy by Props 属性

sql - 如何缓存sql查询,其结果永远不会改变?

c# - Windows 上的 Postgres ODBC 与命名管道连接

postgresql - PostgreSQL 是否有任何列保持表行之间的唯一性,就像 oracle 有 rowId 和 rowNum 一样?

postgresql - integer out of range 剩余磁盘空间太小无法将id转换为bigint等解决方法

c# - 包含数字和字母的orderby()