[英]Select SUM, Join two tables, group sum by OrderID in SQL Query
Currently trying to solve the reason for this error:目前正在尝试解决这个错误的原因:
Column 'Orders.OrderID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.列“Orders.OrderID”在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。
My goal is to group all the quantities for the items in each order ID, from the Order Details
table我的目标是从Order Details
表中对每个订单 ID 中的项目的所有数量进行分组
The SQL Server database I'm using is open to the public, as part of W3School's website tools.我使用的 SQL Server 数据库是对公众开放的,作为 W3School 网站工具的一部分。 View it here if you'd like to test your query results: https://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_datepart如果您想测试查询结果,请在此处查看: https ://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_datepart
I appreciate any help, and please let me know if you need more context/information to help me out.感谢任何帮助,如果您需要更多上下文/信息来帮助我,请告诉我。 Thanks!谢谢!
PS: please pardon my messy code, new to SQL:) PS:请原谅我乱七八糟的代码,SQL新手:)
What I have so far:到目前为止我所拥有的:
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);
What I'm trying to achieve: my mentor gave me a small sample image to reference from.我想要实现的目标:我的导师给了我一张小样本图片作为参考。 This is how I want to print out the quantities in my query with the column name OrderItems
这就是我想使用列名OrderItems
在查询中打印数量的方式
If you remove the SUM
function from SELECT
, and remove the last join table statement, you'll see my query aggregates everything correctly up until OrderItems
just fine.如果您从SELECT
中删除SUM
函数,并删除最后一个连接表语句,您将看到我的查询正确地聚合了所有内容,直到OrderItems
就好了。 I have yet to add the OrderRevenue
column and order it by descending Revenue
value, but big brownie points if you want to go the extra mile and explain how to solve that as well.我还没有添加OrderRevenue
列并通过递减Revenue
值对其进行排序,但是如果您想更进一步并解释如何解决该问题,请加分。
Using the example data you provided through w3c:使用您通过 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
Your syntax error was because you did not define a GROUP BY and reference the columns which you wanted to aggregate to.您的语法错误是因为您没有定义 GROUP BY 并引用要聚合到的列。 When you use an aggregate function (like SUM
or COUNT
) you must also tell the engine which columns you will be grouping by.当您使用聚合函数(如SUM
或COUNT
)时,您还必须告诉引擎您将根据哪些列进行分组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.