首页 > 解决方案 > SQL Server 不会正确划分值

问题描述

我试图在 SQL Server 中获取下面原始数据的第 80 个和第 50 个百分位数,然后将第 80 个百分位数除以第 50 个百分位数,并将其称为 LOTTR。当我这样做时,LOTTR 值是错误的,因为手动计算是不同的。我不知道它为什么这样做。

TMC        Travel_time 
----------------------
113P07005    0.79 
113P07005    0.61 
113P07005    1.31 
113P07005    1.25 
113P07005    1.87 
113P07005    1.31 
113P07005    1.25 

到目前为止我有什么代码:

WITH PERCENTILES_LOTTR
AS (
    SELECT TMC_code
        ,EPOCH
        ,percentile_CONT(.80) WITHIN
    GROUP (
            ORDER BY cast(travel_time_minutes AS FLOAT)
            ) OVER (PARTITION BY TMC_code) AS P80
        ,percentile_CONT(.50) WITHIN
    GROUP (
            ORDER BY cast(travel_time_minutes AS FLOAT)
            ) OVER (PARTITION BY TMC_code) AS P50
    FROM [dbo].[I430_2019_nonull_Cars_1_21]
    WHERE DATEPART(HOUR, EPOCH) BETWEEN 6
            AND 7
        AND (
            WKDAY != 'SAT'
            AND WKDAY != 'SUN'
            )
    )
SELECT tmc_code
    ,cast(p80 AS FLOAT) / cast(p50 AS FLOAT) AS LOTTR
FROM percentiles_LOTTR
GROUP BY tmc_code
    ,p80
    ,p50
ORDER BY Tmc_CODE

输出结果:

在此处输入图像描述

标签: sql-server

解决方案


推荐阅读