MySQL 如何根据一个车站每5分钟的实时人数计算当天人数中位值
要根据一个车站每5分钟的实时人数计算当天人数中位值,可以使用以下步骤:
- 创建一个包含时间戳和实时人数的表。例如:
CREATE TABLE station_data (
timestamp DATETIME,
num_people INT
);
-
将每5分钟的实时人数插入到表中。可以使用定时任务或者编写脚本来实现每5分钟插入一次数据。
-
使用以下SQL查询计算当天人数中位值:
SELECT
AVG(num_people) as median
FROM (
SELECT
num_people,
@rownum:=@rownum+1 as `row_number`,
@total_rows:=CASE WHEN @rownum = 1 THEN COUNT(*) OVER() END as `total_rows`
FROM
station_data
JOIN (SELECT @rownum:=0) r
WHERE
timestamp >= DATE(NOW())
AND timestamp < DATE_ADD(DATE(NOW()), INTERVAL 1 DAY)
ORDER BY
num_people
) as `median_calculation`
WHERE
`row_number` IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );
该查询使用子查询和变量来计算中位数。首先,将数据按照实时人数升序排序,并为每一行分配一个行号。然后,使用变量计算总行数,并使用行号计算中位数。最后,取出中位数行的实时人数,并计算平均值作为当天人数中位值。
注意:上述查询仅适用于MySQL 8.0及以上版本。如果使用的是旧版本的MySQL,可能需要使用不同的方法来计算中位数
原文地址: https://www.cveoy.top/t/topic/gtQU 著作权归作者所有。请勿转载和采集!