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