我有一个带有表t1的PostgreSQL数据库,我想计算一个阈值。 例如,汽车1使用的燃料比所有汽车的75%都多,汽车2使用的燃料比所有汽车的50%都多,... 在数学上,我知道自己想要做什么,但不知道如何构建查询。
id | name | value | threshold
________________________
1 | car1 | 30 | ...%
2 | car2 | 15 | ..%
3 | car3 | 7 |
4 | car4 | 5 |
这里是一个 SQL Fiddle: http://sqlfiddle.com/#!15/1e914/1
UPDATE t1
SET threshold =
select count(value)
from t1
其中 (value > [每行的值]) 并且后跟 *100/总数()
非常抱歉我的表述很差,我有些迷茫。我还尝试了一些聚合函数。
100 * PERCENT_RANK() OVER (ORDER BY value)
或者100 * CUME_DIST() OVER (ORDER BY value)
。 - dnoethRANK/COUNT
的微小变化 :-) - dnoeth(rank() - 1) / count()
,它正好给出了这个问题中的结果。- 1
可能很小,但这就是为什么你不能使用内置函数的原因。 - PatrickPERCENT_RANK
基于(RANK-1)/(COUNT-1)
,即具有小于当前值的值的行数,而CUME_DIST
则基于小于或等于。 - dnoeth