从亚选范围引用字段

时间:2015-08-03 16:09:28

标签: sql postgresql amazon-redshift

我目前正处理一段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:这是我正在研发的红移数据库。

3 个答案:

答案 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;