我的数据库中有一个Order
表,其中的列包括order_nbr
,create_ts
等。
直接使用以下SQL计算每日平均订单数
select avg(cnt)
from
(
select date(create_ts) dt, count(distinct order_nbr)
from order
group by date(create_ts)
)
如果我想绘制每日平均数与季度数怎么办?如何估算一定时间内的平均值?出于演示目的,它将是一个条形图,其中日平均值为y轴,季度(2017Q3、2017Q4、2018Q1、2018Q2)为x轴。
我能想到的是,这将是长达90天的运行窗口中avg
的{{1}}。另一个想法可能是创建一个avg
维度表。因此,每个日期都有一个相应的季度名称。我不清楚如何为此编写SQL查询。
答案 0 :(得分:1)
要绘制每日平均v / s季度的图,您基本上需要计算一个季度的每日平均值,然后根据该季度将它们分组。
要获取与日期对应的季度,可以使用Quarter()函数。
尝试以下查询:
SELECT
YEAR(inner_nest.dt) AS yr,
QUARTER(inner_nest.dt) AS qtr,
AVG(inner_nest.daily_avg) AS daily_avg_qtrwise
FROM
(
SELECT
DATE(create_ts) AS dt,
COUNT(DISTINCT order_nbr) AS daily_avg
FROM order
GROUP BY DATE(create_ts)
)
GROUP BY
YEAR(inner_nest.dt),
QUARTER(inner_nest.dt)
注意,Quarter()函数仅返回特定年份的季度数字。因此,您将需要使用年份数字(yr)和季度数字(qtr),以确定特定的季度。
答案 1 :(得分:0)
您只需要向查询添加一个部分即可按日期范围过滤结果。 应用WHERE语句选择要过滤的字段和结果,然后使用AND语句应用其他过滤器。
例如:
select avg(cnt)
from
(
select date(create_ts) dt, count(distinct order_nbr)
from order
where date(create_ts) >= date(START_DATE) and date(create_ts) <= date(END_DATE)
group by date(create_ts)
)
这意味着您每个季度都需要一个单独的查询。
答案 2 :(得分:0)
您可以只使用constexpr
和YEAR()
函数并按它们分组吗?
QUARTER()