我有我的查询,我需要使用相关子查询获得相同的输出。我是相关子查询的新手,所以请帮忙。
原始查询:
SELECT Sales.SalesOrderHeader.CustomerID, SUM(Sales.SalesOrderDetail.LineTotal)
FROM Sales.SalesOrderDetail
INNER JOIN Sales.SalesOrderHeader
ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID
GROUP BY Sales.SalesOrderHeader.CustomerID;
答案 0 :(得分:0)
对不起评论中的所有来回。在查询的SELECT部分中使用相关子查询,您也可以将其写为:
SELECT customerID, sum(sumOfLines)
FROM
(
SELECT header.CustomerID,
(SELECT sum(Detail.LineTotal) FROM Sales.SalesOrderDetail.LineTotal as Detail WHERE Detail.SalesOrderID = header.SalesOrderID) as sumOfLines
FROM Sales.SalesOrderHeader.CustomerID as header
) sub
GROUP BY customerID
这非常难看,并且不会表现得更快。您的DBMS很有可能为这两个版本选择相同的执行路径。
更新:我通过使用子查询更新了上面的sql再次聚合,以便只有唯一的customerID才能通过,因为我们无法在使用相关子查询的查询中的相关子查询上进行聚合。