我有一个名为tasks
的表
id | name | duration
---+-----+---------
1 | foo | 10
2 | bar | 15
3 | baz | 13
4 | foo | 12
etc
其中name
列中的值可以重复。我的目标是为每个name
值生成持续时间指标,但只计算每个name
低于第99百分位数的持续时间。我使用以下查询计算name = 'foo'
低于第99百分位数的值的指标
SELECT
MIN(duration), MAX(duration), STDDEV(duration), AVG(duration)
FROM (SELECT
duration,
NTILE(100) OVER (ORDER BY duration) AS percentile
FROM tasks
WHERE name = 'foo') t
WHERE percentile < 99;
如何重写此查询,以便一次性计算name
列的所有可能值的这些度量,而不是更新WHERE name = 'foo'
并运行多个查询?
1条答案
按热度按时间fivyi3re1#
我可以通过在
NTILE
命令中添加PARTITION BY name
,并在主查询中按name
分组来解决这个问题。感谢@vicki为我指明了正确的方向