[英]Select SUM, Join two tables, group sum by OrderID in SQL Query
目前正在嘗試解決這個錯誤的原因:
列“Orders.OrderID”在選擇列表中無效,因為它未包含在聚合函數或 GROUP BY 子句中。
我的目標是從Order Details
表中對每個訂單 ID 中的項目的所有數量進行分組
我使用的 SQL Server 數據庫是對公眾開放的,作為 W3School 網站工具的一部分。 如果您想測試查詢結果,請在此處查看: https ://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_datepart
感謝任何幫助,如果您需要更多上下文/信息來幫助我,請告訴我。 謝謝!
PS:請原諒我亂七八糟的代碼,SQL新手:)
到目前為止我所擁有的:
SELECT
O.OrderID,
YEAR(O.OrderDate) AS OrderYear,
DATEPART(qq, O.OrderDate) AS OrderQuarter,
CONCAT(E.FirstName, SPACE(1), E.LastName) AS EmployeeName,
C.CustomerName,
S.ShipperName,
SUM(D.Quantity) AS OrderItems
FROM
((((Orders AS O
JOIN
Employees AS E ON O.EmployeeID = E.EmployeeID)
JOIN
Customers AS C ON O.CustomerID = C.CustomerID)
JOIN
Shippers AS S ON O.ShipperID = S.ShipperID)
JOIN
OrderDetails AS D ON O.OrderID = D.OrderID);
我想要實現的目標:我的導師給了我一張小樣本圖片作為參考。 這就是我想使用列名OrderItems
在查詢中打印數量的方式
如果您從SELECT
中刪除SUM
函數,並刪除最后一個連接表語句,您將看到我的查詢正確地聚合了所有內容,直到OrderItems
就好了。 我還沒有添加OrderRevenue
列並通過遞減Revenue
值對其進行排序,但是如果您想更進一步並解釋如何解決該問題,請加分。
使用您通過 w3c 提供的示例數據:
SELECT o.OrderID, DATEPART(YEAR,o.OrderDate) AS OrderYear, DATEPART(QUARTER,o.OrderDate) AS OrderQuarter,
E.FirstName + ' ' + E.LastName AS EmployeeName, C.CustomerName, S.ShipperName, SUM(d.Quantity) AS Quantity--, SUM(d.Quantity*d.Price) AS OrderRevenue
FROM Orders o
INNER JOIN Employees e
ON o.EmployeeID = e.EmployeeID
INNER JOIN Customers c
ON o.CustomerID = c.CustomerID
INNER JOIN Shippers s
ON o.ShipperID = s.ShipperID
INNER JOIN OrderDetails d
ON o.OrderID = d.OrderID
GROUP BY o.OrderID, DATEPART(YEAR,o.OrderDate), DATEPART(QUARTER,o.OrderDate),
E.FirstName + ' ' + E.LastName, C.CustomerName, S.ShipperName
OrderID OrderYear OrderQuarter EmployeeName CustomerName ShipperName Quantity
--------------------------------------------------------------------------------------------------------
10249 1996 3 Michael Suyama Tradicao Hipermercados Speedy Express 49
10250 1996 3 Margaret Peacocl Hanari Carnes United Package 60
10368 1996 4 Andrew Fuller Ernst Handel United Package 78
10389 1996 4 Margaret Peacock Bottom-Dollar Marketse United Package 81
10418 1996 1 Margaret Peacock QUICK-Stop Speedy Express 146
10442 1997 1 Janet Leaverling Ernst Handel United Package 170
您的語法錯誤是因為您沒有定義 GROUP BY 並引用要聚合到的列。 當您使用聚合函數(如SUM
或COUNT
)時,您還必須告訴引擎您將根據哪些列進行分組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.