powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Высших 3 студента по грейдам на каждый курс
5 сообщений из 5, страница 1 из 1
Высших 3 студента по грейдам на каждый курс
    #40049167
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

У меня такой вопрос, связанный с максимальными тремья грейдами на каждый курс.

Есть 4 таблицы.

Grade
Student
Section
Course
Они связаны по таким полям:

Код: plsql
1.
2.
3.
4.
SELECT numeric_grade, s.first_name, s.last_name, c.description from grade g
            LEFT JOIN student s ON g.student_id = s.student_id
            LEFT JOIN section sec ON g.section_id = sec.section_id
            LEFT JOIN course c ON sec.course_no = c.course_no



На выходе получаю массив данных.

Стоит вопрос, на который я и так и сяк не смог ответить.

Нужно 3 максимальных numeric_grade найти для каждого c.description
c.description - это название курса.


Так же из общего массива найти 3 самых максимальных numeric_grade

Я вот так написал:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
       select * from(select max(numeric_grade) as grade, s.first_name, s.last_name, c.description from grade g
            INNER JOIN student s on g.student_id = s.student_id
            INNER JOIN section sec on g.section_id = sec.section_id
            INNER JOIN course c on sec.course_no = c.course_no
            group by s.first_name, s.last_name, c.description
            order by grade desc) s
            where ROWNUM = 3



База вернула пустой массив.
А если поставлю ROWNUM = 1 вместо ROWNUM = 3, то база возвращает 1 запись как максимальную.
Почему ROWNUM = 3 не работает? Где в моем коде ошибка подскажите пожалуйста?

Заранее благодарю.
...
Рейтинг: 0 / 0
Высших 3 студента по грейдам на каждый курс
    #40049170
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid
Почему ROWNUM = 3 не работает?
Забудь про rownum и RTFM analitic functions
...
Рейтинг: 0 / 0
Высших 3 студента по грейдам на каждый курс
    #40049308
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя бы подскажите в чем проблема этого кода, почему он возвращает мне пустое значение вместо трех записей? Где моя ошибка? Как сделать так чтобы 3 записи увидеть?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select * from(select max(numeric_grade) as grade, s.first_name, s.last_name, c.description from grade g
            INNER JOIN student s on g.student_id = s.student_id
            INNER JOIN section sec on g.section_id = sec.section_id
            INNER JOIN course c on sec.course_no = c.course_no
            group by s.first_name, s.last_name, c.description
            order by grade desc) s
            where ROWNUM = 3
...
Рейтинг: 0 / 0
Высших 3 студента по грейдам на каждый курс
    #40049311
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил. Всем спасибо.
...
Рейтинг: 0 / 0
Высших 3 студента по грейдам на каждый курс
    #40049312
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROWNUM назначается по мере выборки
-- получили первую строку, назначили ей ROWNUM=1, она не подходит по условию, отбросили
-- получили следующую строку, с учетом того, что предыдущих строк, удовлетворяющим условиям не было, эта становится (пока) первой, назначаем ей ROWNUM=1, не подходит, отбросили
-- ...

Ну и как избавиться -- уже сказали, использовать аналитику (row_number() over()) или подзапрос
Код: plsql
1.
2.
3.
4.
5.
select ... from (
   select ..., rownum rn from (
      select ... from ... order by ...
   )
) where rn=3


Т.к. ROWNUM опять же назначается по мере выборки ДО упорядочивания, надо делать еще один позапрос. С аналитикой это все можно задать в конструкции упорядочивания
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Высших 3 студента по грейдам на каждый курс
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]