我想在Postgres中运行一个SQL查询,它与你在没有order by子句的情况下运行初始查询所获得的完全相反。
因此,如果您的查询是:
SELECT * FROM users
然后
SELECT * FROM users ORDER BY <something here to make it exactly the reverse of before>
会不就是这样?
ORDER BY Desc
答案 0 :(得分:5)
您正在构建 错误的假设 ,您将获得确定顺序的行:
SELECT * FROM users;
你得到的是任意的。 Postgres以其认为合适的任何方式返回行。对于简单查询,通常按其物理存储顺序排列,通常是输入行的顺序。但是没有保证,它可能会在两次调用之间的任何时间发生变化,例如当后台进程重新排序行时 - 例如VACUUM
。或者更复杂的查询可能会根据索引或连接返回行。简而言之:对于关系数据库中的表行, 没有可靠的订单 ,除非您使用ORDER BY
指定它。
也就是说,假设您按照 物理存储 的顺序从上述简单查询中获取行,这将使您获得相反的顺序:
SELECT * FROM users
ORDER BY ctid DESC;
ctid
是表示物理顺序的内部元组ID。相关:
答案 1 :(得分:0)
这是一个tsql解决方案,这可能会让你知道如何在postgres中做到这一点
select * from (
SELECT *, row_number() over( order by (select 1)) rowid
FROM users
) x
order by rowid desc