percentile rank query

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: Raw Message | Whole Thread | 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

Responses

Browse pgsql-general by date

  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