我在6月的前两周的销售数据,星期一日期,即6月1日,6月8日,低于
日期|计数
2015-06-01 03:25:53 | 1
2015-06-01 03:28:51 | 1
2015-06-01 03:49:16 | 1
2015-06-01 04:54:14 | 1
2015-06-01 08:46:15 | 1
2015-06-01 13:14:09 | 1
2015-06-01 16:20:13 | 5
2015-06-01 16:22:13 | 1
2015-06-01 16:27:07 | 1
2015-06-01 16:29:57 | 1
2015-06-01 19:16:45 | 1
2015-06-08 10:54:46 | 1
2015-06-08 15:12:10 | 1
2015-06-08 20:35:40 | 1
我需要在给定范围内找到每周平均销售额。
复杂查询:
(some_manipulation_part), ifact as
( select date, sales_count from final_result_set
) select date_part('h',date )) as h ,
date_part('dow',date )) as day_of_week ,
count(sales_count)
from final_result_set
group by h, dow.
输出:
h | day_of_week |数
3 | 1 | 3
4 | 1 | 1
8 | 1 | 1
10 | 1 | 1
13 | 1 | 1
15 | 1 | 1
16 | 1 | 8
19 | 1 | 1
20 | 1 | 1
如果我尝试对上述最终结果应用平均值,那么实际上并没有得到正确答案!
(some_manipulation_part), ifact as
( select date, sales_count from final_result_set
) select date_part('h',date )) as h ,
date_part('dow',date )) as day_of_week ,
avg(sales_count)
from final_result_set
group by h, dow.
h | day_of_week |数
3 | 1 | 1
4 | 1 | 1
8 | 1 | 1
10 | 1 | 1
13 | 1 | 1
15 | 1 | 1
16 | 1 | 1
19 | 1 | 1
20 | 1 | 1
所以我在给定范围内有两个星期一,它实际上并没有除以它。我甚至不确定redshift里面发生了什么。
答案 0 :(得分:1)
要获得“每周平均值”,请使用date_trunc()
:
SELECT date_trunc('week', my_date_column) as week
, avg(sales_count) AS avg_sales
FROM final_result_set
GROUP BY 1;
我希望您实际上并没有使用date
作为日期列的名称。它是SQL中的保留字和基本类型名称,不要将其用作标识符。
如果您按星期几(DOW
)进行分组,则每个工作日的平均值 。星期日是0.(星期日使用ISODOW
获得7。)