gpt4 book ai didi

sql - dense_rank() order by 和 nulls - 如何让它将它们视为排名的底部?

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

我使用的是 Postgresql 版本 9.1.9:

select version();
"PostgreSQL 9.1.9 on armv7l-unknown-linux-gnueabihf,
compiled by gcc (Debian 4.6.3-14+rpi1) 4.6.3, 32-bit"

我有一个简单的表(称为 Test),其中有一个可为 null 的 bigint 列(称为 A)。该表具有以下数据:

NULL
1
2

现在我想创建一个密集的排名(因此使用 dense_rank() 函数)所以我执行以下查询:

select "A", dense_rank() over (order by "A" desc) from public."Test"

返回:

NULL,1
2,2
1,3

有趣的是,如果我在 SQL Server 2008 R2 中设置完全相同的东西并运行相同的查询,它会返回:

2,1
1,2
NULL,3

所以,我对谁是正确的感兴趣,但更实际地说,我想要的是 SQL Server 的行为,所以,我怎样才能让 PostgreSQL 将 null 视为排名的底部?? p>

(即,将 NULLS 排序为小于任何值)

我在dense_rank页面上注意到了这一点,但它并没有具体谈论这个功能,但也许这是一个线索?

Note: The SQL standard defines a RESPECT NULLS or IGNORE NULLS option for lead, lag, first_value, last_value, and nth_value. This is not implemented in PostgreSQL: the behavior is always the same as the standard's default, namely RESPECT NULLS. Likewise, the standard's FROM FIRST or FROM LAST option for nth_value is not implemented: only the default FROM FIRST behavior is supported. (You can achieve the result of FROM LAST by reversing the ORDER BY ordering.)

最佳答案

使用 NULLS LAST子句修改 NULL 值的排序方式。完全符合您的要求:

SELECT "A", dense_rank() OVER (ORDER BY "A" DESC <b>NULLS LAST</b>)
FROM public."Test"

不仅适用于窗口函数,还适用于ORDER BY 任何地方

Postgres 开箱即用。由于 NULL 按升序排序在最后,因此当顺序倒置时,它应该默认排在第一位。

相关:

关于sql - dense_rank() order by 和 nulls - 如何让它将它们视为排名的底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17177406/

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