SQL Inner присоединиться к подсчету различных - PullRequest
0 голосов
/ 30 октября 2018

У меня есть три таблицы: Покупатель - Область, край - Перевозчик

Мне нужно узнать, сколько клиентов у каждого оператора.

select CarrierFirstName + ' ' + carrierlastname ' Carrier Name', CustomerID
from Carrier
inner join Route ON Carrier.CarrierID = Route.CarrierId
inner join Customer ON Customer.RouteID = Route.RouteID
group by carrier.CarrierFirstName, CarrierLastName, CustomerID

Это дает мне имена операторов несколько раз и каждый отдельный идентификатор клиента, тогда как мне нужны имена, за которыми ИТОГО количество клиентов, связанных с каждым именем

Joe Johnson | 15|
Carrie Lan  | 12| 

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вам нужно исправить group by. Это также использует псевдонимы таблиц для упрощения запроса:

select (c.CarrierFirstName + ' ' + c.carrierlastname) as carrier_name,
       count(*)
from Carrier c inner join
     Route r
     on c.CarrierID = r.CarrierId inner join
     Customer cu
     on cu.RouteID = r.RouteID
group by c.CarrierFirstName, c.CarrierLastName
0 голосов
/ 30 октября 2018

Предположительно, вам просто нужно считать здесь:

SELECT
    CarrierFirstName + ' ' + carrierlastname AS 'Carrier Name',
    COUNT(*) AS num_customeres
FROM Carrier ca
INNER JOIN Route r
    ON ca.CarrierID = r.CarrierId
INNER JOIN Customer cu
    ON cu.RouteID = r.RouteID
GROUP BY
    CarrierFirstName + ' ' + carrierlastname;

Обратите внимание, что нежелательно объединять носителей по их именам, потому что два человека могут иметь одинаковые имя и фамилию (у меня даже есть двойные где-то в мире). Вместо этого агрегирование по некоторому первичному ключу в таблице Carrier было бы лучшей стратегией.

Я ввел псевдонимы в запрос, чтобы их было легче читать.

...