2016-02-11 3 views
1
SelectClassicModels.Orders.CustomerNumber, 
ClassicModels.CUSTOMERS.CUSTOMERNAME,  
ClassicModels.Employees.LASTNAME, 
ClassicModels.Employees.firstNAME, 
ClassicModels.employees.EmployeeNumber 
from ClassicModels.Orders 

join 
ClassicModels.Customers 
on ClassicModels.Orders.CustomerNumber = ClassicModels.Customers.CUSTOMERNUMBER 

join 

ClassicModels.EMPLOYEES 
on ClassicModels.Employees.EMPLOYEENUMBER = ClassicModels.CUSTOMERS.SalesRepEmployeeNumber 

Те три таблицы, когда присоединился работа просто отлично, но когда я пытаюсь добавить эти модификаторы, они не работаютзапрессовки 3 таблицы на SQL и проверки условий

group by ClassicModels.Orders.CustomerNumber 
having count(ClassicModels.Orders.CustomerNumber) < 4 

ответ

1

Во-первых, добро пожаловать в 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.

Удачи вам!

+1

Вы, сэр, гений. Я не знал, что все они должны группироваться. Я не могу вам достаточно поблагодарить –

Смежные вопросы