我有一个看起来像这样的表:
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天”,但这似乎需要很长时间。我想知道是否有办法编写一个窗口函数来执行此操作。
答案 0 :(得分:2)
从你的数字来看,你可能正在寻找这个:
SELECT *, round(ct::numeric/first_value(ct) OVER (ORDER BY day), 4) AS pct
FROM tbl;
“每行的百分比,计算为ct
除以第一行的ct
,由最小的day
数字定义。”