【问题标题】:Create a new column from existing columns从现有列创建新列
【发布时间】:2021-01-02 17:27:43
【问题描述】:

我想从这个示例表中创建一个新列,但还有一个到目前为止我无法弄清楚的条件,我想创建一个特定于每个城市的平均持有量列。

Name      | City   | Holdings 
Tom Jones | London | 42       
Rick James| Paris  | 83       
Mike Tim  | NY     | 83       
Milo James| London | 83       

因此,在此示例表中,London 有多个实例,因此它将具有唯一值“62.5”,表示特定于城市列中的值的持股平均值。

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 sql subquery average window-functions


    【解决方案1】:

    在 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
    

    【讨论】:

    • 这是否适用于我可以指定的多种条件,例如匹配超过特定数量的姓氏或财产的值?
    • @JehaimanAsmar:可能,是的,但这取决于确切的要求(以及您的 MySQL 版本)。为此,您可能需要ask a new question
    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2019-12-27
    • 2020-05-10
    • 1970-01-01
    • 2019-06-24
    相关资源
    最近更新 更多