我正在關注 T-SQL 的教程。我的任務是找出每個客戶的總金額和每個客戶的平均金額。我的解決方案如下 -
SELECT o.custid, SUM(d.unitprice*d.qty) AS TotalPerCustID, AVG(d.unitprice*d.qty) as AvarageSalesAmount
FROM Sales.Orders as o
INNER JOIN Sales.OrderDetails as d ON
o.orderid=d.orderid
GROUP BY o.custid
ORDER BY o.custid
我得到的結果對于每個 custid = '1' 正好 12 個訂單是正確的 -
| 卡斯蒂德 | TotalPerCustID | 平均銷售額 |
|---|---|---|
| 1 | 4596.20 | 383.0166 |
但是,本教程建議正確的解決方案如下 -
SELECT
c.custid,
SUM(c.totalsalesamountperorder) AS totalsalesamount,
AVG(c.totalsalesamountperorder) AS avgsalesamount
FROM
(
SELECT
o.custid, o.orderid, SUM(d.unitprice * d.qty) AS totalsalesamountperorder
FROM Sales.Orders AS o
INNER JOIN Sales.OrderDetails d ON d.orderid = o.orderid
GROUP BY o.custid, o.orderid
) AS c
GROUP BY c.custid
根據我的觀點,這個解決方案的結果是錯誤的 -
| 卡斯蒂德 | 總銷售額 | 平均銷售額 |
|---|---|---|
| 1 | 4596.20 | 766.0333 |
請告知兩種解決方案是否存在差異,哪一種是正確的。謝謝你。
uj5u.com熱心網友回復:
他們的查詢看起來是正確的。問題是您的平均值(即總和/計數)是錯誤的,因為您使用了錯誤的計數。您使用的是訂單詳細資訊計數,而不是訂單計數。他們通過首先按 orderID 匯總,然后應用其 AVG 聚合來解決此問題。
如果您想在沒有子選擇的情況下執行此操作,我會更改您的查詢以計算平均值,如下所示:
SELECT SUM(d.UnitPrice*d.Qty)/COUNT(DISTINCT o.OrderID) AS AverageSalesAmount
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446848.html
