gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:40:40 27 4
gpt4 key购买 nike

我是 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/

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