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

Presto query: add the average value as a new column

我有以下 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 clause'

SELECT
    *,
    AVG(hourly_rate) AS mean_hourly_rate
FROM wage_table

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

您可以使用 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)

您也可以使用交叉连接

 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;

这是一个数据库 fiddle link - https://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=8c819f2e1e040c74c0f0514e271a4c84