基于排名位置的数据离散化

Asl*_*986 1 postgresql normalization window-functions

假设我有一个包含架构的表:

id   value
1    0.3
2    0.6
5    0.1
4    0.7
Run Code Online (Sandbox Code Playgroud)

由...提供

CREATE TABLE foo AS
SELECT * FROM (
  VALUES (1,0.3::float),(2,0.6),(5,0.1),(4,0.7)
) AS x(id, value)
Run Code Online (Sandbox Code Playgroud)

我想离散值列。

这个想法是对值进行排序,并将 1 与前半部分相关联,将 2 与第二部分相关联。

id   value  normalized
1    0.3    1
2    0.6    2
5    0.1    1
4    0.7    2
Run Code Online (Sandbox Code Playgroud)

我不知道如何在 SQL 中做到这一点,有什么帮助吗?

PS:我正在使用 Postgres,所以任何依赖 Postgres 的解决方案也可以

ype*_*eᵀᴹ 5

您可以使用该NTILE()功能:

select id, value,
       ntile(2) over (order by value) as normalized
from table_name ;
Run Code Online (Sandbox Code Playgroud)

2意味着在根据over子句排序后,这些值应该被分成两个桶:(ORDER BY value)