基于平均值计算百分位数的查询

问题描述 投票:0回答:1

我有一群运动员,我想从百分位的角度计算他们的分数。根据他们的最高分这样做没有意义,但根据他们的平均分这样做更接近目标。

所以我们假设这个数据:

运动员ID 积分
1 100
1 200
1 300
1 400
1 500
2 101
2 202
2 303
2 404
2 505
3 10
3 20
3 30
3 40
3 50

使用这些数据,我可以执行这个简单的查询来计算他们的平均分:

SELECT
    t.athleteId,
    AVG(t.points) AS average
FROM table t
GROUP BY t.athleteId

我会得到以下结果:

运动员ID 平均
1 300
2 303
3 30

使用这些平均值,我现在想要根据原始表的平均得分来计算运动员的百分位数。为了让事情变得更复杂一些(因为这个查询是更大的图景的一部分,我不能忽视这一点),我还想知道运动员的最佳成绩、总成绩以及他们的最佳成绩排名。因此,我期望以下结果:

运动员ID 平均 最佳成绩 总分 排名 百分位数
1 300 500 15 2 0.60
2 303 505 15 1 0.67
3 30 50 15 11 0.13

我需要可以生成该结果的 SQL Server 查询。

sql sql-server percentile
1个回答
0
投票

您可以简单地使用 MAX 和 stbs lect 扩展您的查询

SELECT
    t.athleteId,
    AVG(t.points) AS average,
    MAX(t.points) as bestScore,
    (sELECT COUNT(*) FROM 5able) as  totalScores
FROM table t
GROUP BY t.athleteId
© www.soinside.com 2019 - 2024. All rights reserved.