| From: | "William Temperley" <willtemperley(at)gmail(dot)com> | 
|---|---|
| To: | pgsql-general(at)postgresql(dot)org | 
| Subject: | percentile rank query | 
| Date: | 2008-04-10 14:06:18 | 
| Message-ID: | 439dc11e0804100706u16315a95hcd4a0c01cb64982d@mail.gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-general | 
Hi all
I'm trying to calculate the percentile rank for a record based on a
'score' column, e.g. a column of integers such as:
23,77,88,23,23,23,12,12,12,13,13,13
without using a stored procedure.
So,
select count(*) as frequency, score
from scoretable
group by score
order by score
Yields:
frequency score
3             12
3             13
4             23
1             77
1              88
However I'd like this result set:
frequency score   runningtotal
3             12        3
3             13        6
4             23        10
1             77        11
1              88       12
Where the running total is the previous frequency added to the current
frequency. Score order is significant.
So I can then do ((runningtotal-frequency)+(frequency/2))/(select
count(*) from scoretable) to give me the percentile rank for each
score.
Is this possible in one query? I just can't figure out how to get the
running total in a result set.
Thanks very much,
Will Temperley
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2008-04-10 14:23:10 | Re: visibility rule in a EXECUTE with multi sql | 
| Previous Message | Ivano Luberti | 2008-04-10 13:48:46 | Re: begin transaction locks out other connections |