【问题标题】:Presto query: add the average value as a new columnPresto查询:将平均值添加为新列
【发布时间】:2021-01-19 05:52:20
【问题描述】:

我有以下wage_table

worker_id, hourly_rate
  1      , 20
  2      , Null
  3      , 30
  4      , 40

我想添加一个额外的列mean_hourly_rate,比如:

worker_id, hourly_rate, mean_hourly_rate
  1      , 20         ,  30
  2      , Null       ,  30
  3      , 30         ,  30
  4      , 40         ,  30

我有以下代码,但收到错误 'column worker_id not in GROUP BY 子句'

SELECT
    *,
    AVG(hourly_rate) AS mean_hourly_rate
FROM wage_table

我想知道正确的做法是什么?谢谢!

【问题讨论】:

    标签: sql presto trino


    【解决方案1】:

    您可以使用window functionavg(hourly_rate) OVER ()

    例如:

    WITH data(worker_id, hourly_rate) AS (
        VALUES
            (1, 20),
            (2, Null),
            (3, 30),
            (4, 40)
    )
    SELECT 
        worker_id, 
        hourly_rate, 
        avg(hourly_rate) OVER () AS mean_hourly_rate
    FROM data
    

    产生:

     worker_id | hourly_rate | mean_hourly_rate
    -----------+-------------+------------------
             1 |          20 |             30.0
             2 |        NULL |             30.0
             3 |          30 |             30.0
             4 |          40 |             30.0
    (4 rows)
    

    【讨论】:

      【解决方案2】:

      你也可以使用交叉连接

       SELECT
          T1.*, T2. mean_hourly_rate
       FROM wage_table T1
       CROSS JOIN (select AVG(hourly_rate) AS mean_hourly_rate from wage_table
      Where hourly_rate is NOT NULL) T2;
      

      这是一个 db fiddle 链接 - https://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=8c819f2e1e040c74c0f0514e271a4c84

      【讨论】:

      • 谢谢@Somy 我想忽略空行并做平均。这会忽略空行吗?
      • @Edamame - 感谢您的澄清。编辑答案以解决相同的问题。它现在应该可以工作了。
      猜你喜欢
      • 2017-11-07
      • 2015-01-13
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2018-02-23
      • 2020-10-12
      • 2018-01-20
      相关资源
      最近更新 更多