Вам не потребуется HAVING
. Как вы предположили, присоедините все таблицы к ключам соединения, а затем сгруппируйте оба столбца имени сотрудника.
Ниже запроса (с производной таблицы) должен быть независимым от каких-либо СУБД, но исключает окончательное рассмотрение ограничивая результат в одной строке только, которая зависит от RDBMS
SELECT d.FirstName, d.LastName, d.TotalQuantity
FROM
(
SELECT e.FirstName, e.LastName, SUM(od.Quantity) AS TotalQuantity
FROM OrderDetails od
INNER JOIN Orders o ON OrderDetails.OrderId = o.OrderId
INNER JOIN Customers c ON o.CustomerName = c.CustomerName -- Switch to a surrogate key
INNER JOIN Employees e ON c.EmployeeId = e.EmployeeId
-- WHERE od.ProductId = `FooBars` -- If you need a filter
GROUP BY e.FirstName, e.LastName
) d
ORDER BY d.TotalQuantity DESC;
Для «просто требование сверху работника, вам нужно ограничить количество строк только 1, который RDBMS зависит:
- Изменить последнюю строку на
ORDER BY ... LIMIT 1;
для MySql
- или изменение последней линии
ORDER BY ... FETCH FIRST 1 ROWS ONLY;
для новых версий SqlServer и Oracle
- или изменить первую строку в
SELECT top 1 d.FirstName, ..
для старых версий SqlServer
Примечания:
- Согласно комментарию, это кажется странным, что идентификатор продукта на таблица ордеров, код sku/item обычно находятся на уровне позиции заказа
- Моделирование идентификатора обслуживающего служащего непосредственно на столе клиента не является хорошей идеей - как насчет повторных клиентов? Новая таблица соединений
ServingEmployeeCustomer
звучит по порядку.
- Соединения по CUSTOMERNAME также не хорошая идея - если нет естественного ключа, желательно создать простой суррогатный ключ (INT идентичности/автоматический номер, или Guid и т.д.)
Можете ли вы подтвердить, что 'product' находится на' orders', а не на 'order details' - viz, в таблице' details', на что ссылается 'количество', если не' sku'/' item'/'код продукта'? – StuartLC
Я подозреваю, что вы создали дубликат аккаунта: http://stackoverflow.com/questions/27327810/sql-inner-join-customers-with-orders –
@StuartLC, отредактировал его, и я надеюсь, что это сделало его более понятным! – youngengineer