我有一个带有表t1的postgresql,我想要计算一个阈值。例如,汽车1的耗油量超过所有汽车的75 %,car2使用的燃料超过所有汽车的50%,.数学上,我明白我想做什么,但我不知道如何构建查询
id | name | value | threshold
________________________
1 | car1 | 30 | ...%
2 | car2 | 15 | ..%
3 | car3 | 7 |
4 | car4 | 5 |下面是一个sql花式http://sqlfiddle.com/#!15/1e914/1
UPDATE t1
SET threshold =
select count(value)
from t1其中(值>在每一行上),后面跟着*100/总计数()
对那次糟糕的尝试很抱歉,但我有点迷路了。还尝试了一些聚合函数。
发布于 2016-04-18 16:58:27
您可以通过一个窗口函数很好地解决这个问题。
UPDATE t1
SET threshold = sub.thr
FROM (
SELECT id, 100. * (rank() OVER (ORDER BY value) - 1) / count(*) OVER () AS thr
FROM t1) sub
WHERE t1.id = sub.id;rank()函数给出有序集合中的秩(从1开始),在这种情况下,在列value上,该列被除以集合中的行总数。请注意,count(*) OVER ()计算分区中的行总数,但它不像常规的count(*)那样聚合行。
发布于 2016-04-18 22:42:40
WITH q AS
(
SELECT *,
(RANK() OVER (ORDER BY value) - 1) * 100. / COUNT(*) OVER () nt
FROM mytable
)
UPDATE mytable
SET threshold = nt
FROM q
WHERE mytable.id = q.id发布于 2016-04-18 16:51:44
你想计算使用燃料的百分比吗?
UPDATE t1
SET threshold =
(select value * 100 / t2.sumValue
from (select sum(value) sumValue from t1) t2
)或者,如果您想要计算特定的阈值,可以显示您的预期结果吗?
https://stackoverflow.com/questions/36699368
复制相似问题