Mysql 从现有列创建新列

Mysql 从现有列创建新列,mysql,sql,subquery,average,window-functions,Mysql,Sql,Subquery,Average,Window Functions,我想从这个示例表中创建一个新列,但还有一个条件我还没有弄清楚,我想创建一个特定于每个城市的平均持有量列 Name | City | Holdings Tom Jones | London | 42 Rick James| Paris | 83 Mike Tim | NY | 83 Milo James| London | 83 因此,在这个示例表中,伦敦有多个实例,因此它的唯一值为“62.5”,表示特定于cit

我想从这个示例表中创建一个新列,但还有一个条件我还没有弄清楚,我想创建一个特定于每个城市的平均持有量列

Name      | City   | Holdings 
Tom Jones | London | 42       
Rick James| Paris  | 83       
Mike Tim  | NY     | 83       
Milo James| London | 83       
因此,在这个示例表中,伦敦有多个实例,因此它的唯一值为“62.5”,表示特定于city列中的值的平均持有量

Name      | City   | Holdings | City Avg. Holdings 
Tom Jones | London | 42       | 62.5
Rick James| Paris  | 36       | 36
Mike Tim  | NY     | 70       | 70
Milo James| London | 83       | 62.5

在MySQL 8.0中,这是直接使用窗口函数实现的:

select t.*, avg(holdings) over(partition by city) avg_city_holdings
from mytable t
在早期版本中,您可以加入:

select t.*, a.avg_city_holdings
from mytable t
left join (select city, avg(holdings) avg_city_holdings from mytable group by city) a
    on a.city = t.city

这是否适用于多种条件,例如,我可以指定匹配超过某个数字的姓氏或财产的值?@jehaimansmar:可能是,但这取决于具体要求(以及您的MySQL版本)。你可能想为此付出代价。