Заявка на участие 2 таблицы с лучшими из 3 - PullRequest
0 голосов
/ 13 июня 2018

Как мне сделать запрос, в котором будут перечислены имена и рейтинг топ-3 в таблицах

Ответы [ 5 ]

0 голосов
/ 13 июня 2018

Этот вопрос звучит так, как будто он из студента, выполняющего задание!В любом случае, некоторые Oracle SQL могут быть полезны следующим образом.

SELECT STUDENT_NAME, STUDENT_GRADE
FROM (
      SELECT S.NAME AS "STUDENT_NAME", G.GRADE AS "STUDENT_GRADE"
      FROM STUDENTS S JOIN GRADES G USING (STUDENT_ID)
      WHERE S.SEX='m'
      ORDER BY 2
      )
WHERE ROWNUM < 4;

Oracle в более поздних версиях:

SELECT S.NAME AS "STUDENT_NAME", G.GRADE AS "STUDENT_GRADE"
FROM STUDENTS S JOIN GRADES G USING (STUDENT_ID)
WHERE S.SEX='m'
ORDER BY 2
FETCH FIRST 3 ROWS ONLY;
0 голосов
/ 13 июня 2018

PostgreSQL :

SELECT name, grade 
FROM students
JOIN grades USING(student_id)
WHERE sex = 'm'
ORDER BY grade desc
LIMIT 3
  • JOIN таблицы
  • фильтровать по полу, используя WHERE
  • сортировать вв порядке убывания (по классам), используя ORDER BY..desc, чтобы большие числа находились вверху
  • , уменьшите количество результатов до 3, используя LIMIT

SQL Server :

SELECT TOP 3 s.name, g.grade 
FROM students s
JOIN grades g ON ( s.student_id = g.student_id )
WHERE sex = 'm'
ORDER BY grade desc
  • JOIN таблицы
  • фильтровать по полу, используя WHERE
  • сортировать в порядке убывания (по шкале), используя ORDER BY..desc, чтобы большие числа находились вверху
  • , уменьшив количество результатов до 3, используя TOP в начале запроса

Примечание. Возможно, вы захотите включить в свои результаты уникальный идентификатор, поскольку у вас может быть много учеников с одинаковыми именами, что делает результат неоднозначным

0 голосов
/ 13 июня 2018

Если ваша БД - Oracle, используйте:

select name, grade 
  from
(
select s.name, g.grade, dense_rank() over (order by grade desc) dr
  from students s join grades g on ( s.student_id = g.student_id )
 where s.sex = 'm'
)
where dr <= 3;

Демонстрация SQL Fiddle (для Oracle)

Если БД - Mysqlили PostgreSQL, затем используйте:

select s.name, g.grade
  from students s join grades g on ( s.student_id = g.student_id )
 where s.sex = 'm'
 order by g.grade desc 
 limit 3;

Демонстрация SQL Fiddle (для MySQL)

Демонстрация SQL Fiddle (для PostgreSQL)

0 голосов
/ 13 июня 2018

вы можете использовать rownum для извлечения этого результата.

Вы можете попробовать ниже одного и настроить его, если необходимо.

Выбрать * из (ВЫБЕРИТЕ st.name, gr.grade ОТ студентовst, оценки gr, где st.student_id = gr.student_id и st.sex = 'm' (порядок по классу DESC), где rownum <= 3; </p>

0 голосов
/ 13 июня 2018

В SQL Server:

SELECT TOP 3 G.student_id, S.name, S.sex, G.grade
FROM Grades G
INNER JOIN Student S
    ON G.student_id = S.student_id
WHERE S.sex = 'm'
ORDER BY grade DESC
...