sql - 如何使用 SQL (postgresql) 查询有条件地更改每个组内的值?

标签 sql postgresql

我是 postgresql(或 sql)的新手,还没有学会如何处理这种“组内”操作。我的数据是这样的:

p_id    number
97313   4
97315   10
97315   10
97325   0
97325   15
97326   4
97335   0
97338   0
97338   1
97338   2
97344   5
97345   14
97349   0
97349   5

p_id 不是唯一的,可以看作是一个分组变量。我想更改每个 p_id 中的数字以实现这样的操作:

如果对于给定的 p_id,其中一个值为 0,但该 pid 的任何其他“数字”大于 2,则将 0 值设置为 NULL。与“p_id”97325 一样,有“0”和“15”与之关联。我将0替换为NULL,其他15个不变。

但对于 p_id 97338,与其关联的三行的编号为“0”“1”“2”,因此我不会将 0 替换为 NULL。

最终数据应该是这样的:

p_id    number
97313   4
97315   10
97315   10
97325   NULL
97325   15
97326   4
97335   0
97338   0
97338   1
97338   2
97344   5
97345   14
97349   NULL
97349   5

非常感谢您的帮助!

最佳答案

CASE 中的COUNT OVER 中的CASE:

SELECT 
p_id, 
(CASE 
 WHEN number = 0 AND COUNT(CASE WHEN number > 2 THEN number END) OVER (PARTITION BY p_id) > 0 
 THEN NULL 
 ELSE number 
 END) AS number
FROM yourtable

测试一下 here在 rextester 上。

关于sql - 如何使用 SQL (postgresql) 查询有条件地更改每个组内的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51937058/

相关文章:

sql - 在选择查询中获取表的最后一条记录

sql - 在sql中,如何从具有from和thru时间戳的记录中选择随机时间

sql - 如何比较一列的值? SQL(Postgres)

sql - 按多列分组并限制每组 - Postgres

python - PostGres 为数据帧返回 MemoryError

sql - 在Postgresql中,对2列添加唯一约束,不等于特定值

sql - ADO 可更新查询 - 当其中一个连接表没有记录时出错

php - SQL Buddy + https(ssl) + nginx 无法登录

sql - 不同列中的大量重复 sum(x) 是否会使 Select 变慢?

sql - 为什么我的 pg_hint_plan 前导提示没有被使用?