базовая группа sql с процентами - PullRequest
1 голос
/ 15 марта 2010

У меня есть проблема, и НЕТ это не домашняя работа, это просто программист, который долгое время был далеко от 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 ]

2 голосов
/ 15 марта 2010

Взгляните на первую часть Дополнительные сведения о SQL Server 2005: первое место для групп, пейджинговых и общих табличных выражений . Чтобы получить 3 лучших ученика в каждой группе, вы можете использовать:

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 голос
/ 15 марта 2010

Используйте предложение TOP (n) PERCENT:

SELECT TOP (60) PERCENT * FROM students ORDER BY grade DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...