gpt4 book ai didi

mysql - 相当于 pandas 'transform' 的 SQL 是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:32 25 4
gpt4 key购买 nike

假设您有以下 SQL 表:

  A  B  C  
2 1 4
3 4 5
3 1 1
1 4 0
5 0 1

并且您想要为列 B 的每个不同值添加/显示包含列 A 的平均值(或任何其他聚合函数)的列。您想要保留所有列。所以结果看起来像这样:

  A  B  C    avg(A)|B
2 1 4 2.5
3 4 5 2.0
3 1 1 2.5
1 4 0 2.0
5 0 1 5.0

据我所知,在 pandas 中执行此操作的最佳方法是:

>>> df['avg(A)|B'] = df.groupby('B')['A'].transform('mean')
>>> df
A B C avg(A)|B
0 2 1 4 2.5
1 3 4 5 2.0
2 3 1 1 2.5
3 1 4 0 2.0
4 5 0 1 5.0

您将如何在 SQL 中执行此操作?可以避免使用 JOIN 吗?

最佳答案

您可以连接到包含每个分组 b 的聚合值的派生表

select * from mytable t1
join (
select avg(a), b
from mytable
group by b
) t2 on t2.b = t1.b

或者使用子查询

select *, (select avg(a) from mytable t2 where t2.b = t1.b)
from mytable t1

问题同时标记为 mysql 和 psql,所以我不确定您使用的是哪个数据库。但是在 postgres 上你可以使用窗口函数

select *, avg(a) over (partition by b) 
from mytable

关于mysql - 相当于 pandas 'transform' 的 SQL 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33730092/

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