SQL查询帮助 - 百分位数

时间:2013-06-27 23:38:33

标签: sql aggregate-functions

我有一个包含2列的单个表。

学生证 课程标识

这两列彼此之间存在多对多的关系。 我想知道 - 1.学生在所有学生中注册的平均课程数量。 2.所有学生注册课程数量的90%。

我使用PERCENT_DISC()尝试了这个但不知何故我无法搞清楚。 任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

第一个问题:

SELECT AVG(numCourses)
FROM(
        SELECT Cast(COUNT(CourseId) AS DECIMAL(16,2)) as numCourses
        FROM YourTable
        GROUP BY StudentID
) Grouped

现在关于百分位,如果我完全得到问题中的问题:
第一个查询不是答案,但有助于理解它。它显示了每个学生的课程数量以及所有学生的离散百分位数:

SELECT StudentID, count(CourseId)
       , PERCENTILE_DISC(0.5)
        WITHIN GROUP (ORDER BY COUNT(CourseId))
        OVER (PARTITION BY 1) Percentile
FROM YourTAble
GROUP BY StudentID;

此查询将显示百分位数:

SELECT DISTINCT PERCENTILE_DISC(0.5)
        WITHIN GROUP (ORDER BY COUNT(CourseId))
        OVER (PARTITION BY 1) Percentile
FROM YourTAble
GROUP BY StudentID

我把它放在SQLFiddle