MySQL57 如何根据一个车站每5分钟的实时人数计算当天人数中位值
可以通过以下步骤来计算MySQL5.7中一个车站每5分钟的实时人数的当天人数中位值:
- 创建一个包含车站ID、时间戳和人数的表格。例如:
CREATE TABLE station_stats (
station_id INT,
timestamp DATETIME,
num_people INT
);
- 将每5分钟的实时人数插入到表格中。可以使用MySQL的触发器来实现自动插入。例如:
CREATE TRIGGER insert_stats
AFTER INSERT ON station_stats
FOR EACH ROW
BEGIN
IF MINUTE(NEW.timestamp) % 5 = 0 THEN
INSERT INTO stats_5min (station_id, timestamp, num_people)
VALUES (NEW.station_id, NEW.timestamp, NEW.num_people);
END IF;
END;
- 创建一个视图,将每个车站每5分钟的实时人数转换为当天的人数列表。例如:
CREATE VIEW daily_stats AS
SELECT station_id, DATE(timestamp) AS date, SUM(num_people) AS daily_total
FROM station_stats
GROUP BY station_id, DATE(timestamp);
- 使用MySQL的GROUP_CONCAT函数和SUBSTRING_INDEX函数将每个车站当天的人数列表转换为逗号分隔的字符串。例如:
SELECT station_id, GROUP_CONCAT(daily_total ORDER BY daily_total SEPARATOR ',') AS daily_totals_str
FROM daily_stats
WHERE date = '2021-01-01'
GROUP BY station_id;
- 使用MySQL的SUBSTRING_INDEX函数和LENGTH函数来计算每个车站当天人数中位值。例如:
SELECT station_id, SUBSTRING_INDEX(SUBSTRING_INDEX(daily_totals_str, ',', (LENGTH(daily_totals_str) - LENGTH(REPLACE(daily_totals_str, ',', ''))) / 2 + 1), ',', -1) AS median
FROM (
SELECT station_id, GROUP_CONCAT(daily_total ORDER BY daily_total SEPARATOR ',') AS daily_totals_str
FROM daily_stats
WHERE date = '2021-01-01'
GROUP BY station_id
) AS station_daily_totals;
这将返回一个包含每个车站当天人数中位值的结果集
原文地址: https://www.cveoy.top/t/topic/gtRH 著作权归作者所有。请勿转载和采集!