我正在创建一份报告,比较不同单位的总时间和数量.这里简化了我目前正在使用的查询:
SELECT m.Unit,
COUNT(*) AS Count,
SUM(m.TimeInMinutes) AS TotalTime
FROM main_table m
WHERE m.unit <> ''
AND m.TimeInMinutes > 0
GROUP BY m.Unit
HAVING COUNT(*) > 15
Run Code Online (Sandbox Code Playgroud)
但是,有人告诉我,我需要排除行的时间最高或最低5%的情况,以试图摆脱一些古怪的异常值.(如在应用聚合之前删除行.)
我怎么做?
gbn*_*gbn 10
您可以使用NTILE排除顶部和底部x百分位数
SELECT m.Unit,
COUNT(*) AS Count,
SUM(m.TimeInMinutes) AS TotalTime
FROM
(SELECT
m.Unit,
NTILE(20) OVER (ORDER BY m.TimeInMinutes) AS Buckets
FROM
main_table m
WHERE
m.unit <> '' AND m.TimeInMinutes > 0
) m
WHERE
Buckets BETWEEN 2 AND 19
GROUP BY m.Unit
HAVING COUNT(*) > 15
Run Code Online (Sandbox Code Playgroud)
编辑:这篇文章也有几种技巧
| 归档时间: |
|
| 查看次数: |
12534 次 |
| 最近记录: |