Как получить доступ к подзапросу в главном выборе и присоединиться - PullRequest
1 голос
/ 24 мая 2019

Я новичок в SQL, поэтому я решил возиться с базой данных Northwind.В настоящее время я пытаюсь показать информацию о сотрудниках, в частности, сколько денег каждый получил от всех своих заказов.Это то, что мне нужно сейчас получить, чтобы получить общую сумму от каждого EmployeeID:

SELECT Orders.EmployeeID, SUM(cost.Total) AS TotalSales
FROM Orders, (
SELECT OrderID, SUM(OrderDetails.UnitPrice * OrderDetails.Quantity) AS Total
FROM OrderDetails
GROUP BY OrderID
) AS cost
GROUP BY Orders.EmployeeID;

Это работает нормально, однако у меня возникают проблемы с добавлением этого подзапроса к остальной части выбора:

SELECT Employees.EmployeeID AS ID, Employees.LastName AS Last, Employees.FirstName AS First, Employees.Title, COUNT(EmployeeTerritories.TerritoryID) AS `Number of Territories`
FROM Employees
LEFT JOIN EmployeeTerritories ON Employees.EmployeeID = EmployeeTerritories.EmployeeID
GROUP BY Employees.EmployeeID;

Я пробовал это:

SELECT Employees.EmployeeID, Employees.LastName, Employees.FirstName, sales.TotalSales
FROM Employees, (
SELECT Orders.EmployeeID, SUM(cost.Total) AS TotalSales
FROM Orders, (
SELECT OrderID, SUM(OrderDetails.UnitPrice * OrderDetails.Quantity) AS Total
FROM OrderDetails
GROUP BY OrderID
) AS cost
GROUP BY Orders.EmployeeID
) AS sales
LEFT JOIN sales ON Employees.EmployeeID = sales.EmployeeID
GROUP BY EmployeeID;

Однако я получаю сообщение об ошибке, в котором говорится, что таблица 'northwind.sales' не существует.Я думаю, что понимаю, что это потому, что он существует только там, где он был объявлен, но я не уверен, как обойти это.

Как добавить этот подзапрос, чтобы он работал с JOIN, и я могуесть столбец TotalSales?Это вообще возможно, или создание новой таблицы - единственный способ сделать это?

1 Ответ

1 голос
/ 24 мая 2019

Вы можете упростить свои запросы, а позже объединить их раньше.Первый может быть сделан простым JOIN и GROUP BY.

SELECT o.EmployeeID, SUM(od.UnitPrice * od.Quantity) AS TotalSales
FROM Orders as o
join OrderDetails as od
    on od.[OrderID] = o.[OrderID]
GROUP BY o.EmployeeID;

select
    *
from (SELECT o.EmployeeID, SUM(od.UnitPrice * od.Quantity) AS TotalSales
FROM Orders as o
join OrderDetails as od
    on od.[OrderID] = o.[OrderID]
GROUP BY o.EmployeeID
        ) as sales
join (SELECT Employees.EmployeeID AS ID, Employees.LastName AS Last, Employees.FirstName AS First, Employees.Title, COUNT(EmployeeTerritories.TerritoryID) AS NumberOfTerritories
FROM Employees
LEFT JOIN EmployeeTerritories ON Employees.EmployeeID = EmployeeTerritories.EmployeeID
GROUP BY Employees.EmployeeID, Employees.FirstName, Employees.LastName, Employees.Title
        ) as employlees
    on sales.EmployeeID = employlees.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...