我有一个问题并且 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
我会回来罗纳德,比尔和巴拉克。我还需要对其他团队这样做。
答案 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