查找同一列中第一行的百分比

时间:2014-01-14 22:46:06

标签: sql postgresql percentage window-functions

我有一个看起来像这样的表:

Day | Count  
----+------
1   | 59547  
2   | 40448  
3   | 36707  
4   | 34492  

我希望它能像这样查询结果集:

Day | Count | Percentage of 1st row  
----+-------+----------------------
1   | 59547 | 1  
2   | 40448 | .6793  
3   | 36707 | .6164  
4   | 34492 | .5792  

我尝试过使用窗口函数,但似乎只能得到总数的百分比,如下所示:

Day | Count | Percentage of 1st row  
----+-------+----------------------
1   | 59547 | 0.347833452  
2   | 40448 | 0.236269963  
3   | 36707 | 0.214417561  
4   | 34492 | 0.201479024  

但我想要第一个行的一定百分比。我知道我可以使用交叉连接,只查询“第1天”,但这似乎需要很长时间。我想知道是否有办法编写一个窗口函数来执行此操作。

1 个答案:

答案 0 :(得分:2)

从你的数字来看,你可能正在寻找这个:

SELECT *, round(ct::numeric/first_value(ct) OVER (ORDER BY day), 4) AS pct
FROM   tbl;

“每行的百分比,计算为ct除以第一行的ct,由最小的day数字定义。”

关键是window function first_value()

-> SQLfiddle demo.