![](/img/trans.png)
[英]MySQL: How can I calculate the median in a specific radius (longitude / latitude)
[英]How can I calculate the median of all rows?
我想要完成的是:我想计算每个商店过去 49 天和一天中的小时(0 - 24 小时)的行数中位数。
到目前为止我所做的:我当前的 SQL 如下。 我错误地使用了中值函数并收到以下错误: not a single-group group function
。
SELECT
store,
EXTRACT(HOUR FROM CAST(date AS TIMESTAMP)) AS hour_of_day,
median(count(*))
FROM table
WHERE date >= trunc(sysdate - 49)
GROUP BY
store,
EXTRACT(HOUR FROM CAST(date AS TIMESTAMP))
我想知道的是:可以以这种方式使用中值函数吗? 如果是这样,我必须在查询组中更改某些内容吗? 如果没有,你能推荐另一种方法来解决这个问题吗?
我不知道你是否可以用窗口函数来做到这一点。 相关的分析函数,例如中median
,不能累积工作。
但是您可以使用横向连接:
with dh as (
select trunc(date) as dte, extract(hour from date) as hh,
shop, count(*) as cnt
from t
)
select dh.*, m.median_cnt
from dh cross join lateral
(select median(cnt) as median_cnt
from dh dh2
where dh2.hh = dh.hh and
dh2.dte >= dh.dte - interval '48' day and
dh2.dte <= dte
) m;
注意:不清楚您所说的 49 天是什么意思。 我假设您需要正好 7 周,即过去 48 天加上该行的当前日期。
此外,这会忽略0
值。 如果您需要考虑这些,请提出一个新问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.