Calculating percentile rankings in MS SQL

前端 未结 8 1628
清酒与你
清酒与你 2020-12-14 02:22

What\'s the best way to calculate percentile rankings (e.g. the 90th percentile or the median score) in MSSQL 2005?

I\'d like to be able to select the 25th, median,

8条回答
  •  感情败类
    2020-12-14 02:24

    I would think that this would be the simplest solution:

    SELECT TOP N PERCENT FROM TheTable ORDER BY TheScore DESC
    

    Where N = (100 - desired percentile). So if you wanted all rows in the 90th percentile, you'd select the top 10%.

    I'm not sure what you mean by "preferably in a single record". Do you mean calculate which percentile a given score for a single record would fall into? e.g. do you want to be able to make statements like "your score is 83, which puts you in the 91st percentile." ?

    EDIT: OK, I thought some more about your question and came up with this interpretation. Are you asking how to calculate the cutoff score for a particular percentile? e.g. something like this: to be in the 90th percentile you must have a score greater than 78.

    If so, this query works. I dislike sub-queries though, so depending on what it was for, I'd probably try to find a more elegant solution. It does, however, return a single record with a single score.

    -- Find the minimum score for all scores in the 90th percentile
    SELECT Min(subq.TheScore) FROM
    (SELECT TOP 10 PERCENT TheScore FROM TheTable
    ORDER BY TheScore DESC) AS subq
    

提交回复
热议问题