Top.Mail.Ru
Ответы
Аватар пользователя
7лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

SQL запрос к учебной БД NorthWind

Всем привет!
По заданию
"Выяснить каким компаниям сотрудник Leverling Janet отдает предпочтение при доставке продуктов, рассчитав количество заказов доставляемых каждой компанией"
составил запрос к БД, но хоть он и выполняется, но приходит пустой ответ - ноль строк.
Что нужно поправить, как правильно написать код запроса?
Спасибо за ответы!

SELECT DISTINCT Ship.CompanyName, /*выбрать уникальные (DISTINCT) записи: название транспортной компании */
COUNT(Ord.OrderID) AS [Количество заказов] /*количество заказов отправленных данной транспортной компанией*/
FROM Employees Em /*из таблицы сотрудников*/
INNER JOIN Orders Ord /*подсоединяем таблицу сведений о заказах по общему полю ID сотрудника*/
ON Em.EmployeeID = Ord.EmployeeID
INNER JOIN Shippers Ship /*подсоединяем таблицу сведений о транспортных компаниях по общему полю Название компании*/
ON Ord.ShipName = Ship.CompanyName
WHERE Em.LastName = 'Leverling' AND Em.FirstName = 'Janet'
/*выборка данных только для сотрудника по фамилии Leverling и имени Janet */
GROUP BY Ship.CompanyName /*группировка данных по полю названия транспортной компании*/
ORDER BY [Количество заказов] DESC /*сортировка по убыванию (DESC) по количеству отправленных заказов, таким образом вверху выборки окажется самая частоиспользуемая транспортная компания*/

По дате
По рейтингу
Аватар пользователя
Гений
7лет

Опять ты написал ненужный DISTINCT. У людей, которые не умеют писать запросы, часто бывает привычка везде вставлять DISTINCT. DISTINCT нужен довольно редко.
Orders и Shippers связаны неправильно.
Лучше писать запрос так, чтоб каждая таблица была на отдельной строке, тогда её легко закомментировать. Комментарий строки обозначается так --.Для этого надо в select писать звёздочку. Так, изменяя запрос по частям, можно найти ошибку.
select *
FROM Employees Em
JOIN Orders Ord ON Em.EmployeeID = Ord.EmployeeID
JOIN Shippers S ON Ord.ShipVia = S.ShipperID -- правильная связь с таблицей Shippers
WHERE Em.LastName = 'Leverling'
AND Em.FirstName = 'Janet'