如何在时间范围内计算 mysql 方差和标准差
How calculate mysql variance and standard deviation within timeframe
你好table喜欢:
DateTime Ip
2016-12-21 17:00:01 | 127.0.0.1
2016-12-21 17:00:01 | 127.0.0.1
2016-12-21 17:00:03 | 127.0.0.1
2016-12-21 17:00:05 | 127.0.0.2
2016-12-21 17:00:06 | 127.0.0.2
2016-12-21 17:00:06 | 127.0.0.1
2016-12-21 17:00:07 | 127.0.0.2
2016-12-21 17:00:08 | 127.0.0.2
2016-12-21 17:00:08 | 127.0.0.1
2016-12-21 17:00:08 | 127.0.0.1
目前要计算一个ip在一定时间段内每秒的请求数,例如5s我这样做:
SELECT Ip, total/diff_in_secs as Rps FROM (
SELECT Ip, count(*) as total, MAX(DateTime), MIN(DateTime), TIMESTAMPDIFF(SECOND, MIN(DateTime), MAX(DateTime)) as diff_in_secs
FROM requests WHERE DateTime >= '2016-12-21 17:00:01' AND DateTime <= '2016-12-21 17:00:05'
GROUP BY Ip
) as base
ORDER BY Rps Desc
我正在尝试找出一种方法来计算在那段时间内每个 ip 的方差和标准差,从 rps 有什么想法吗?我正在尝试应用此答案中的概念,但收效甚微 Calculate average, variance and standard deviation of two numbers in two different rows/columns with sql / PHP on specific dates
谢谢
试试这个
select
requests_per_sec.ip,
avg(requests_per_sec.n) as Avg_Req_Per_Sec,
std(requests_per_sec.n) as Std_Req_Per_Sec
from
(select ip, count(ip) as n, datetime
from requests
group by datetime, ip) requests_per_sec
group by requests_per_sec.ip
要减小内部 select 的大小,您还可以像这样
使用 UNIX_TIMESTAMP(datetime) div 5
每 5 秒计算一次请求
select
requests_per_sec.ip,
avg(requests_per_sec.n) as Avg_Req_Per_Sec,
std(requests_per_sec.n) as Std_Req_Per_Sec
from
(select ip, count(ip) as n, datetime
from requests
group by UNIX_TIMESTAMP(datetime) div 5, ip) requests_per_sec
group by requests_per_sec.ip
你好table喜欢:
DateTime Ip
2016-12-21 17:00:01 | 127.0.0.1
2016-12-21 17:00:01 | 127.0.0.1
2016-12-21 17:00:03 | 127.0.0.1
2016-12-21 17:00:05 | 127.0.0.2
2016-12-21 17:00:06 | 127.0.0.2
2016-12-21 17:00:06 | 127.0.0.1
2016-12-21 17:00:07 | 127.0.0.2
2016-12-21 17:00:08 | 127.0.0.2
2016-12-21 17:00:08 | 127.0.0.1
2016-12-21 17:00:08 | 127.0.0.1
目前要计算一个ip在一定时间段内每秒的请求数,例如5s我这样做:
SELECT Ip, total/diff_in_secs as Rps FROM (
SELECT Ip, count(*) as total, MAX(DateTime), MIN(DateTime), TIMESTAMPDIFF(SECOND, MIN(DateTime), MAX(DateTime)) as diff_in_secs
FROM requests WHERE DateTime >= '2016-12-21 17:00:01' AND DateTime <= '2016-12-21 17:00:05'
GROUP BY Ip
) as base
ORDER BY Rps Desc
我正在尝试找出一种方法来计算在那段时间内每个 ip 的方差和标准差,从 rps 有什么想法吗?我正在尝试应用此答案中的概念,但收效甚微 Calculate average, variance and standard deviation of two numbers in two different rows/columns with sql / PHP on specific dates
谢谢
试试这个
select
requests_per_sec.ip,
avg(requests_per_sec.n) as Avg_Req_Per_Sec,
std(requests_per_sec.n) as Std_Req_Per_Sec
from
(select ip, count(ip) as n, datetime
from requests
group by datetime, ip) requests_per_sec
group by requests_per_sec.ip
要减小内部 select 的大小,您还可以像这样
使用UNIX_TIMESTAMP(datetime) div 5
每 5 秒计算一次请求
select
requests_per_sec.ip,
avg(requests_per_sec.n) as Avg_Req_Per_Sec,
std(requests_per_sec.n) as Std_Req_Per_Sec
from
(select ip, count(ip) as n, datetime
from requests
group by UNIX_TIMESTAMP(datetime) div 5, ip) requests_per_sec
group by requests_per_sec.ip