簡體   English   中英

選擇 SUM,連接兩個表,在 SQL 查詢中按 OrderID 對總和進行分組

[英]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 並引用要聚合到的列。 當您使用聚合函數(如SUMCOUNT )時,您還必須告訴引擎您將根據哪些列進行分組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM