基本的sql组用百分比

时间:2010-03-15 20:13:52

标签: sql tsql

我有一个问题并且 NO 它不是家庭作业,它只是一个程序员已经远离SQL很长一段时间不得不解决问题。

我有下表:

create table students(
    studentid int identity(1,1), 
    [name] varchar(200), 
    [group] varchar(10), 
    grade numeric(9,2) 
)
go

该组是随意的,假设它是以下“A组”,“B组”......等等。

等级为0 - 100。

如果每组中有5名学生随机分配成绩,那么根据成绩获得前3名学生(前80%)的最佳方法是什么?

如果我有以下内容,那就更具体了:

Ronald, Group A, 84.5
George H, Group A, 82.3
Bill, Group A, 92.0
George W, Group A, 45.5
Barack, Group A, 85.0

我会回来罗纳德,比尔和巴拉克。我还需要对其他团队这样做。

2 个答案:

答案 0 :(得分:2)

看看More with SQL Server 2005 : Top n Per Group, Paging, and Common Table Expressions的第一部分。要获得每组中排名前三的学生,您可以使用:

SELECT  d.studentid,
        d.name,
        d.group,
        d.grade

FROM   (SELECT  s.studentid,
                s.name, 
                s.group, 
                s.grade
                ROW_NUMBER = ROW_NUMBER() OVER (
                    PARTITION BY s.group
                    ORDER BY s.grade DESC)
        FROM    students s
        ) d

WHERE   d.ROW_NUMBER <= 3

答案 1 :(得分:1)

使用TOP (n) PERCENT条款:

SELECT TOP (60) PERCENT * FROM students ORDER BY grade DESC