我有一群运动员,我想从百分位的角度计算他们的分数。根据他们的最高分这样做没有意义,但根据他们的平均分这样做更接近目标。
所以我们假设这个数据:
运动员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 查询。
您可以简单地使用 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