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)
我的任务是计算 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)