SQL 分区中的平均函数

SQL avg function in partition by

我的任务是计算 3 个条件部分中 3 列的平均值。

这是一个来源-table:

我需要 select 工作或休闲基本需求的平均值,按不同年龄段(年轻、活跃或年长)、性别和工作状态分组。

为此,我使用 window-function 应用以下查询:

SELECT
    working, sex, age, 
    ROUND(AVG(primaryNeeds) OVER(w),1) primaryNeeds,
    ROUND(avg(work) OVER(w),1) work,
    ROUND(avg(other)OVER(w),1) other
FROM 
    demography
WINDOW w AS (PARTITION BY 'age', 'working', 'sex' ORDER BY 'age', 'working', 'sex')

但是在计算得到的 select 离子平均值时没有按 'age'、'working'、'sex' - 列进行分组。

我做错了什么?

如果要分组,只需使用分组依据:

SELECT working,
       sex,
       age,
       ROUND(AVG(primaryNeeds), 1) primaryNeeds,
       ROUND(avg(WORK), 1) WORK,
       ROUND(avg(other), 1) other
FROM demography 
group by age, working, sex

如果您想保留原始行并追加平均值,那么您就走在了正确的轨道上。但是,我认为问题是 window 子句中的引号。 order by 是多余的:

SELECT d.*, 
       ROUND(AVG(primaryNeeds) OVER w, 1) as primaryNeeds,
       ROUND(avg(work) OVER w, 1) as work,
       ROUND(avg(other) OVER w, 1) as other
FROM demography d
WINDOW w AS (PARTITION BY age, working, sex)