gpt4 book ai didi

sql - Postgresql 在使用空值优先/限制对空列进行排序时出现奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 11:58:17 25 4
gpt4 key购买 nike

我在 Postgresql 上有以下数据集:

create table data (
id int,
stage varchar(255),
name varchar(255)
);

id stage name
----------------------------
1 pyramid act 1
2 pyramid act 2
3 NULL act 3
4 NULL act 4
5 NULL act 5
6 NULL act 6
7 NULL act 7
8 NULL act 8
9 NULL act 9
10 NULL act 10
11 NULL act 11
12 NULL act 12
13 shangri la act 13

我查询所有的数据表,并用nulls last/limit分阶段排序:

select *
from data
order by stage asc nulls first
limit 5;

结果:

 id    stage      name  
----------------------------
6 NULL act 6
3 NULL act 3
4 NULL act 4
5 NULL act 5
7 NULL act 7
----------------------------

当我改变限制值​​时我得到不同的排序结果的问题:

select *
from data
order by stage asc nulls first
limit 3;

结果:

 id    stage      name  
----------------------------
4 NULL act 4
3 NULL act 3
5 NULL act 5
----------------------------

PS:我使用的是 Postgresql PostgreSQL 10.3

最佳答案

这是标准行为。您在阶段列上排序,这意味着在阶段列中具有相同值的任意行被拾取(并没有一直以相同的方式解决) ,事实上 Postgres 并不关心它们,这就是它拉随机行的原因)

根据经验,除非您自己明确排序,否则您不会得到排序的输出。

请考虑以下示例,您的数据添加了 id 列。这将在您每次执行 SELECT 语句时带来相同的行,假设此列包含唯一值(在您的示例数据中它确实如此)。为此,您可以在 id 列上定义主键或添加唯一约束。

select *
from data
order by stage asc nulls first, id
limit 3;

样本数据中的输出始终相同:

 id    stage      name  
----------------------------
3 NULL act 3
4 NULL act 4
5 NULL act 5

关于sql - Postgresql 在使用空值优先/限制对空列进行排序时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51018275/

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