Во-первых, добро пожаловать в StackOverflow !
Я переформатировал ваш SQL с помощью моего любимого инструмента, с которым я могу предоставить ссылку, если вам интересно. Я также добавил псевдонимы, чтобы сделать его более «читаемым». (Псевдонимы строчных биты после имени таблицы в FROM
и JOIN
статей.)
SELECT orders.CustomerNumber,
customers.CustomerName,
employees.LastName,
employees.FirstName,
employees.EmployeeNumber
FROM CLASSICMODELS.ORDERS orders
JOIN CLASSICMODELS.CUSTOMERS customers
ON orders.CustomerNumber = customers.CustomerNumber
JOIN CLASSICMODELS.EMPLOYEES employees
ON employees.EmployeeNumber = customers.SalesRepEmployeeNumber
Теперь, когда мы получили, что сделано. Давайте добавим ваши предложения GROUP BY
и HAVING
.
GROUP BY
пункты должны иметь ALL столбцов, используемых в предложении SELECT
в них. (Я не знаю, почему. Я не смотрел его, но я просто знаю, что это, как это работает. :))
SELECT orders.CustomerNumber,
customers.CustomerName,
employees.LastName,
employees.FirstName,
employees.EmployeeNumber
FROM CLASSICMODELS.ORDERS orders
JOIN CLASSICMODELS.CUSTOMERS customers
ON orders.CustomerNumber = customers.CustomerNumber
JOIN CLASSICMODELS.EMPLOYEES employees
ON employees.EmployeeNumber = customers.SalesRepEmployeeNumber
GROUP BY orders.CustomerNumber,
customers.CustomerName,
employees.LastName,
employees.FirstName,
employees.EmployeeNumber
Теперь должно работать. Тогда вам просто нужно добавить свой пункт HAVING
.
SELECT orders.CustomerNumber,
customers.CustomerName,
employees.LastName,
employees.FirstName,
employees.EmployeeNumber
FROM CLASSICMODELS.ORDERS orders
JOIN CLASSICMODELS.CUSTOMERS customers
ON orders.CustomerNumber = customers.CustomerNumber
JOIN CLASSICMODELS.EMPLOYEES employees
ON employees.EmployeeNumber = customers.SalesRepEmployeeNumber
GROUP BY orders.CustomerNumber,
customers.CustomerName,
employees.LastName,
employees.FirstName,
employees.EmployeeNumber
HAVING COUNT(orders.CustomerNumber) < 4
Я также глядя на ваш запрос, и вы могли бы получить быстрее (и более эффективных результатов), используя запрос, как это:
WITH CUSTOMERSWITHLESSTHANFOURORDERS
AS
(
SELECT CUSTOMERNUMBER
FROM CLASSICMODELS.ORDERS
GROUP BY CUSTOMERNUMBER
HAVING COUNT(CUSTOMERNUMBER) < 4
)
SELECT O.CUSTOMERNUMBER,
C.CUSTOMERNAME,
E.LASTNAME,
E.FIRSTNAME,
E.EMPLOYEENUMBER
FROM CUSTOMERSWITHLESSTHANFOURORDERS O
JOIN CLASSICMODELS.CUSTOMERS C
ON O.CUSTOMERNUMBER = C.CUSTOMERNUMBER
JOIN CLASSICMODELS.EMPLOYEES E
ON E.EMPLOYEENUMBER = C.SALESREPEMPLOYEENUMBER;
Он использует то, что называется «общий стол выражение "и в основном просто изолирует часть запроса. Он может быть более эффективным, потому что он попытается сгруппировать по меньшему количеству данных, поэтому он может быть быстрее. Будьте осторожны, потому что там много «может», потому что я не знаю, как различные различные вещи настроены в вашей базе данных MySQL.
Удачи вам!
Вы, сэр, гений. Я не знал, что все они должны группироваться. Я не могу вам достаточно поблагодарить –