2014-01-14 53 views
0

我有一個表,看起來像這樣:同一列中找到第一行的百分比

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天」查詢,但似乎需要很長時間。我想知道是否有辦法編寫一個窗口函數來做到這一點。

+2

您的Postgres版本?你有什麼嘗試?定義「第一行的百分比」。請使用[格式化輔助](http://stackoverflow.com/editing-help)。 –

+0

我正在使用Postgres 9.1。感謝您回答我的問題以及格式提示。看起來我需要研究我的窗口功能。 – user3195987

回答

2

從數字來看,你可能會尋找這樣的:

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

「A的每一行的百分比,以最小day數量定義爲ct第一排的ct分計算。」

關鍵是window function first_value()

-> SQLfiddle demo.

+0

完美。這正是我需要的,謝謝演示。 – user3195987

+1

@ user3195987查看答案分數下方的輪廓勾號? http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –