在MySQL中计算随时间增加或减少的趋势
我有一个具有以下结构的表存储:在MySQL中计算随时间增加或减少的趋势,mysql,trending,Mysql,Trending,我有一个具有以下结构的表存储: store_visits: store_name: string visit_count: integer visit_date: date 我的目标是创建一个查询,对于每个商店和给定的日期范围,该查询将计算: 当前使用AVGvisit_计数的日期范围内的平均访问次数 商店访问量是增加还是减少 相对增加/减少率为1至4级,其中1=低比率,4=高比率 访问量的相对增加/减少率仅用于定向目的。它将始终是一个线性比例 我花了一天的时间试图构造MySQL查询来实现
store_visits:
store_name: string
visit_count: integer
visit_date: date
我的目标是创建一个查询,对于每个商店和给定的日期范围,该查询将计算:
当前使用AVGvisit_计数的日期范围内的平均访问次数
商店访问量是增加还是减少
相对增加/减少率为1至4级,其中1=低比率,4=高比率
访问量的相对增加/减少率仅用于定向目的。它将始终是一个线性比例
我花了一天的时间试图构造MySQL查询来实现这一点,但我还是无法理解
任何帮助都将不胜感激
谢谢,
-Scott假设您只想比较日期范围前半部分和后半部分的店铺访问量,下面是一个跨越过去40天的示例,使用2个子查询获取每个范围的计数
select
((endVisits + startVisits)/40) average,
(endVisits > startVisits) increasing,
((endVisits - startVisits)/(startVisits) * 100) percentChange
from
(select sum(visit_count) startVisits
from store_visit
where
visit_date > current_date - 40
and visit_date <= current_date - 20) startRange,
(select sum(visit_count) endVisits
from store_visit
where
visit_date > current_date - 20) endRange;
注释
我不知道你想怎么计算你的1-4增长额,所以我只是把它作为一个百分比,你可以根据你想要的逻辑修改它。此外,还需要根据需要更新子查询中的日期范围
编辑:刚刚将平均值更新为endVisits+startVisits/40,而不是endVisits+startVisits/2。您还可以在子查询中使用avg函数,将这些查询的总和除以2,得到整个期间的平均值 @navigator48我刚意识到如果没有开始访问,你将被零除。我试过了,在这种情况下你会得到null,所以我只是想给你一个关于这种情况的提示,这样你就可以避免null指针异常。谢谢你的这个例子-它几乎完全符合我想要做的。@navigator48-很高兴我能帮上忙: