此时,在我的查询中,我的结果大致如下:
id isCorrect value
1 0 100
1 0 101
2 1 80
2 0 100
2 0 120
3 1 1
3 1 1
我的结果需要是这样的:
id isCorrect value
1 0 100.5
1 0 100.5
2 1 80
2 0 80
2 0 80
3 1 1
3 1 1
用英语来说,对于给定的 id,我希望使用 isCorrect = 1
的值来替换该 id 的其他值。如果没有 isCorrect
行,我想对它们进行平均。
据我所知,正在执行一个 rank()
函数,为我将使用的行提供 1,例如:
SELECT id, isCorrect, value, rank() over (partition by id order by isCorrect DESC) as correctRank from foo
这会给我
id isCorrect value correctRank
1 0 100 1
1 0 101 1
2 1 80 1
2 0 100 3
2 0 120 3
3 1 1 1
3 1 1 1
我遇到了一个障碍,不知道该往哪里走。
最佳答案
您可以使用窗口函数获得所需的结果:
SELECT id, isCorrect,
CASE
WHEN MAX(isCorrect) OVER (PARTITION BY id ORDER BY isCorrect DESC) = 1
THEN FIRST_VALUE([value]) OVER (PARTITION BY id ORDER BY isCorrect DESC)
ELSE AVG([value]*1.0) OVER (PARTITION BY id)
END AS [value]
FROM mytable
关于sql - 如果不同的列为 true,则替换列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35138706/