【问题标题】:Calculate the 95th percentile difference between the actual and predicted columns in SQL计算 SQL 中实际列和预测列之间的第 95 个百分位差
【发布时间】:2016-08-24 16:11:19
【问题描述】:

我有一个这样的 PostgreSQL 数据库

具有数据类型的表和相应的列是

读数

meas_id - integer(Foreign keyed to Measurement.meas_id)
actual_meas - integer
predicted_meas - integer 
pdatetime - Timestamp with timezone (UTC)
status - Enum('completed', 'inprogress', 'nottaken')

测量

meas_id - integer
meas_name - string 

Meas_name has measurements length, breadth, width, height

对于每个测量“长度”和“宽度”,我正在尝试计算过去 30 天内所有已完成测量的实际值和预测值之间的 95% 差异。

我正在尝试这样做,但没有得到它

SELECT 
Measurement.meas_name, 
MIN(Readings.actual_meas - Readings.predicted_meas) AS Difference
FROM
(
    SELECT TOP 95 PERCENT 
    FROM Readings
    ORDER BY Difference DESC
) AS NinetyFivePerc
JOIN Measurement
WHERE NinetyFivePerc.meas_id = Measurement.meas_id
AND NinetyFivePerc.pdatetime >= DATEADD(DAY, -30, GETDATE())
AND Measurement.meas_name IN ('length','breadth')
AND NinetyFivePerc.status = 'completed'

我正在学习 SQL,因此请提供有关实现它的优化方式的输入。

【问题讨论】:

    标签: sql postgresql tsql


    【解决方案1】:

    Postgres 具有 percentile_disc() 和 percentile_cont() 聚合函数。

    所以,你可以这样做:

    SELECT m.meas_name, 
           PERCENTILE_CONT(0.05) WITHIN GROUP (ORDER BY r.actual_meas - r.predicted_meas),
           PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY r.actual_meas - r.predicted_meas)
    FROM Readings r JOIN
         measurements m
         ON r.meas_id = m.meas_id
    WHERE m.meas_name IN ('length', 'breadth') AND
          r.status = 'completed'
    GROUP BY m.meas_name;
    

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多