【发布时间】:2015-10-31 06:50:57
【问题描述】:
这是我的问题的简化版本(我想不出一个在现实生活中有意义的例子)。
假设我有一个表人
桌人
ID Name Number Category
1 Follett null Thriller
2 Rowling null Fantasy
3 Martin 80 Fantasy
4 Cage 55 Thriller
5 Baldacci null Thriller
现在我想得到以下结果:
ID Name Number Category
1 Follett 56 Thriller
2 Rowling 81 Fantasy
3 Martin 80 Fantasy
4 Cage 55 Thriller
5 Baldacci 57 Thriller
- 按类别分组
- 选择每个类别的最大数值
- 将 row_number(按类别分区)添加到该数字并设置新值,(编辑:)但仅适用于之前为 null 的数字。
到目前为止我拥有的部分(不工作,更多地说明我想做的事情,我知道为什么这不可能工作)
UPDATE Person P
SET Number = sub.current + sub.row
FROM (
SELECT
Id,
max(Number) as current,
(ROW_NUMBER() OVER(PARTITION BY Category)) AS row
FROM Person
GROUP BY Category
) as sub
WHERE P.Id = sub.Id
注意:对于一个类别的所有数字都为空的极端情况,max(Number) 应该只是 0,而新值应该只是 row_numbers()。
我正在使用 Postgresql。
【问题讨论】:
标签: sql postgresql aggregate-functions