SQL Запрос, включающий поиск наиболее частого значения кортежа в столбце - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть следующие отношения:

  • учит (ID, идентификатор_курса, sec_id, семестр, год)
  • инструктор (ID, имя, имя_депта, заработная плата)

Я пытаюсь express следующее как SQL запрос:

Найти идентификатор и имя преподавателя, который преподавал большинство курсов (т. е. имеет наибольшее количество кортежей среди преподавателей).

Мой запрос

select ID, name 
from teaches 
  natural join instructor
group by ID
order by count(*) desc

Я знаю, что это не правильно , но я чувствую, что я на правильном пути. Чтобы ответить на вопрос, вам нужно поработать с обоими отношениями, поэтому требуется операция естественного соединения. Поскольку вопрос требует инструктора, который преподавал большинство курсов, это говорит мне о том, что мы пытаемся подсчитать, сколько раз каждый ID инструктора появляется в отношении преподавателей. Из того, что я понимаю, мы рассчитываем посчитать разные идентификаторы инструкторов, поэтому необходима группировка по команде.

1 Ответ

0 голосов
/ 16 февраля 2020

Не используйте естественные объединения: все, что они делают, это полагаются на имена столбцов, чтобы решить, какие столбцы связаны между таблицами (они не проверяют ограничения внешних ключей или тому подобное, как вы могли бы подумать). Это ненадежно по своей природе.

Вы можете использовать обычные inner join:

select i.id, i.name 
from teaches t
inner join instructor i on i.id = t.sec_id
group by i.id, i.name
order by count(*) desc
limit 1

Примечания:

  • это предполагает, что столбец teaches.sec_id относится к instructor.id (я не вижу, какой другой столбец можно использовать)

  • Я добавил предложение limit к запросу, поскольку вы указали, что хотите, чтобы верхний инструктор - синтаксис может варьироваться в разных базах данных

  • всегда ставить префикс имени столбца в таблицу, к которой он принадлежит, чтобы сделать запрос однозначным и более легким для понимания

  • Это хорошая практика (и требование во многих базах данных), чтобы в агрегированном запросе все неагрегированные столбцы, перечисленные в предложении select, отображались в предложении group by; Я добавил имя преподавателя в ваше group by предложение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...