[英]basic sql group by with percentage
我有一个问题, 不 ,没有家庭作业,它只是谁已经从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
我会回去罗纳德,比尔和巴拉克 。 我还需要对其他小组这样做。
看看SQL Server 2005的更多内容的第一部分:每个组的前n个,分页和公用表表达式 。 要获得每个小组的前三名学生,您可以使用:
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
使用TOP (n) PERCENT
子句:
SELECT TOP (60) PERCENT * FROM students ORDER BY grade DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.