Верно ли мое решение этой проблемы SQL из интервью? - PullRequest
0 голосов
/ 07 января 2020

Я новичок в SQL (только что закончил курс по Edx), и у меня был этот вопрос на собеседовании, прежде чем я что-то узнал и подумал, что сейчас попробую. Хотите знать, если мое решение правильно. Спасибо!

Проблема

Учитывая следующие две таблицы базы данных, команду и игрока (с соответствующими столбцами базы данных, представленными в строках 8-12 ниже), напишите оператор SQL, который возвращает список имен из 10 лучших команд, отсортированный от самого высокого среднего игрока до самого короткого. Предположим, что высота игрока хранится в виде целого числа, представляющего количество дюймов.

команда

id
league
name
division

игрок

id
name
height
weight
team_id

Решение

SELECT TOP 10 T.Team, P.Name
FROM Team AS T
JOIN Player AS P on T.id = P.team_id
ORDER BY height DESC;

Ответы [ 3 ]

0 голосов
/ 07 января 2020

К сожалению, ваше решение неверно - это, по сути, даст вам список игроков с наибольшим ростом. Итак, если бы два самых высоких игрока в базе данных были в одной команде, то название этой команды появилось бы дважды.

Вот как я бы написал запрос:

SELECT TOP 10 T.[name] as [Team Name], AVG(P.[height]) as [Average Height]
FROM team T
INNER JOIN player P on (T.[id] = P.[team_id])
GROUP BY T.[name]
ORDER BY AVG(P.[height]) DESC
0 голосов
/ 07 января 2020

В постановке задачи предлагается выбрать названия команд, а не выбирать высоту. Вам нужно упорядочить названия команд по среднему росту игрока, и вы можете сделать это, не выбирая среднюю высоту как часть окончательного результата, используя GROUP BY вместе с функцией AVG().

SELECT TOP 10 T.name FROM team T
INNER JOIN player P
ON T.id = P.team_id
GROUP BY T.id
ORDER BY AVG(P.height) DESC
0 голосов
/ 07 января 2020

Команды отсортированы по среднему росту игроков

sql server:

select top 10 T.name, avg(height) as AvgHeight
from team t inner join Player p on T.id = P.team_id
group by T.name
order by 2 desc

Postgres


select T.name, avg(height) as AvgHeight
from team t inner join Player p on T.id = P.team_id
group by T.name
order by 2 desc limit 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...