gpt4 book ai didi

sql - 对具有相同值的两列进行排序时出现奇怪的排序错误(这是错误吗?)

转载 作者:行者123 更新时间:2023-11-29 11:19:24 26 4
gpt4 key购买 nike

我在 postgres 中有以下查询:

SELECT * 
FROM "bookings"
WHERE ("bookings".client_id = 50)
ORDER BY session_time DESC
LIMIT 20 OFFSET 0

第 20 条记录与第 21 条记录具有相同的 session_time。

此查询返回 20 个结果,但是如果将结果与整个数据库进行比较,查询将返回第 1-19 个结果和第 21 个结果,跳过第 20 个。

可以通过在订单中添加“id”来修复此查询:

SELECT * 
FROM "bookings"
WHERE ("bookings".client_id = 50)
ORDER BY session_time DESC, id
LIMIT 20 OFFSET 0

但是我想知道这个错误是怎么发生的?使用偏移量和限制时,postgres 如何订购相同的文件?是随机的吗?这是 postgres 的错误吗?

最佳答案

这不是错误。限制和偏移量发生在排序之后,并且在一种情况下与另一种情况下选择哪些行是不确定的。一般来说,您希望有一个决胜局,以便您的排序稳定且确定(我更喜欢使用独特的决胜局,即使我没有限制或偏移问题,以确保每次运行时查询都相同)。

如果您正在进行分页,请将主键或代理键添加到排序中作为决胜局。这确实是最好的方法。

关于sql - 对具有相同值的两列进行排序时出现奇怪的排序错误(这是错误吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11904766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com