所以我有一个表q4_2022_data,其中每个记录是一次骑自行车,这个表中的一个列称为ride_time是每次骑行的时间。我使用MySQL并尝试使用PERCENTILE_DISC查找此列的中值,但显然不起作用。
WITH RankedRides AS (
SELECT
ride_time,
ROW_NUMBER() OVER (ORDER BY ride_time) AS row_num,
COUNT(*) OVER () AS total_rows
FROM
q4_2022_data
)
SELECT
SEC_TO_TIME(
AVG(TIME_TO_SEC(ride_time))
) AS median_ride_time
FROM (
SELECT
ride_time,
row_num,
total_rows
FROM
RankedRides
) AS subquery
WHERE
row_num BETWEEN (total_rows DIV 2) + 1 AND (total_rows DIV 2) + 2;
字符串
这是我想出的查询,它给了我一个值00:08:00.0000,我试着用其他季度表(q1,q2,q3)来检查,并意识到每一个值都是一个整数。我得到的结果是00:10:00.0000,00:11:00.0000。有什么我可以做的,这样我就得到了确切的中位数,有人能弄清楚为什么它被四舍五入。任何帮助都很感激,谢谢。
1条答案
按热度按时间sqserrrh1#
你使用ROW_NUMBER()和ROW(*)的方法是正确的。我只是觉得你在最后的SELECT语句中计算中位数的方式需要调整。中位数的计算也应该根据行数的总数是偶数还是奇数而有所不同。至少,如果是奇数,中位数是中间值,如果是偶数,中位数是两个中间值的平均值,我希望我是正确的.现在的问题得到的结果,如00:10:00.0000描绘的图片,可能有一个舍入发生在平均值(时间_TO_SEC(骑_时间)).你应该确保平均计算是准确的.
字符串