Presto 查询:添加平均值作为新列

Eda*_*ame 0 sql presto trino

我有以下内容wage_table

worker_id, hourly_rate
  1      , 20
  2      , Null
  3      , 30
  4      , 40
Run Code Online (Sandbox Code Playgroud)

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

worker_id, hourly_rate, mean_hourly_rate
  1      , 20         ,  30
  2      , Null       ,  30
  3      , 30         ,  30
  4      , 40         ,  30
Run Code Online (Sandbox Code Playgroud)

我有以下代码,但出现错误“列worker_id不在GROUP BY子句中”

SELECT
    *,
    AVG(hourly_rate) AS mean_hourly_rate
FROM wage_table
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*rso 5

您可以使用窗口函数avg(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
Run Code Online (Sandbox Code Playgroud)

产生:

 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)
Run Code Online (Sandbox Code Playgroud)