如何在SQL数据库中添加具有另一列的分组平均值的新列?(PostgreSQL)



我有一个表:

点赞48
PostID 上传程序
1 James 18
2 James 20
3 Johny 28
4 Johny 30
5 Rocky
6 洛基 68

您所做的是正确的。

如果你想要一个新的列,在更新后,你必须区分你的结果:

SELECT Uploader, AverageLikesOfUploader FROM yourtable GROUP BY Uploader, AverageLikesOfUploader

但在任何情况下,你仍然需要每次更新你的数据。这对我来说毫无意义。你为什么要在表中保存一个计算值?我建议你采取以下方式:

如果您不想创建新列:

SELECT 
Uploader, 
avg(B.Likes) as AverageLikesOfUploader
FROM
yourtable
GROUP BY Uploader

update语句的查询中需要a和B之间存在关系。

update mytable A
set AverageLikesOfUploader = (
select avg(B.Likes)
from mytable B
where B.Uploader = A.Uploader
)
9.00>td style="ext-align:right;">29.00Rocky>td style="text-align:right;">68
postid上传器
1James2James20
3Johny4Johny30
6Rocky58.00

最简单的方法是在窗口上使用avg

select *, Avg(likes) over(partition by uploader)::int AverageLikesOfUploader
from t

如果你真的想用平均值更新你的表(这不是一个好主意,只需使用上面的查询来获得平均值(,你可以用CTE 应用它

with x as (
select *, Avg(likes) over(partition by uploader) av
from t
)
update t set AverageLikesOfUploader=av
from x
where x.PostId=t.PostId;

看看这个演示小提琴

最新更新