我目前正处理一段SQL,我需要检索数据集的每一行,其中包含中位数和平均值。
实施例
我有以下设置
ID;month;value
我希望找回类似的内容:
ID;month;value;average for this month;median for this month
无需按我的结果分组。
所以它会是这样的:
SELECT ID,month,value,
(SELECT AVG(value) FROM myTable) as "myAVG"
FROM myTable
但我需要将该平均值作为该月的平均值。因此,月份=" 1月份和#34;将具有" 1月和#34;的平均值和中位数。等...
这里的问题是我找不到在子查询中引用月份值的方法
(SELECT AVG(value) FROM myTable)
有人有线索吗?
P.S:这是我正在研发的红移数据库。
答案 0 :(得分:0)
您需要从表中选择所有行,并使用逐月执行的select语句执行左连接。通过这种方式,您可以获得每一行,并通过结果获得该月的结果。
这样的事情:
SELECT * FROM myTable a
LEFT JOIN
(
SELECT Month, Sum(value being summed) as mySum
FROM myTable
GROUP BY Month
) b
ON a.Month = b.Month
有用吗?
答案 1 :(得分:0)
with myavg as
(SELECT month, AVG(value) as avgval FROM myTable group by month)
, mymed as
(select month, median(value) as medval from myTable group by month)
select ID, month, value, ma.avgval, mm.medval
from mytable m left join myavg ma
on m.month = ma.month
left join mymed mm
on m.month = mm.month
您可以使用cte
执行此操作。但是,您需要一个月group by
,因为您正在计算汇总值。
答案 2 :(得分:0)
在Redshift中,您可以使用Window Function。
select month,
avg(value) over
(PARTITION BY month rows unbounded preceding) as avg
from myTable
order by 1;