2016-02-05 92 views
2

我有一個Shippers表和Orders表。要獲得每個託運人發送的訂單數,我使用以下語句:得到平均數

SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders 
LEFT JOIN Shippers 
ON Orders.ShipperID=Shippers.ShipperID 
GROUP BY ShipperName; 

它工作正常。根據以上聲明的結果,我怎樣才能得到每個託運人發送的訂單的平均數平均數

回答

0

嘗試使用子查詢

SELECT myT.*, AVG(NumberOfOrders) FROM(

    SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders 
    LEFT JOIN Shippers 
    ON Orders.ShipperID=Shippers.ShipperID 
    GROUP BY ShipperName; 

) myT 
+0

所以'myT'表示我查詢的結果表,對吧? –

+0

這是根據子選擇結果創建的表的別名。所有子選項都是強制性的(可以是任何名稱) –

1

您可以通過使用AVG()函數實現這一目標:

SELECT Shippers.ShipperName, AVG(Orders.OrderID) AS AvgNumberOfOrders 
FROM Orders 
LEFT JOIN Shippers 
ON Orders.ShipperID=Shippers.ShipperID 
GROUP BY ShipperName; 

的更多信息:http://www.w3schools.com/sql/sql_func_avg.asp

0

一種方法是一個子查詢:

SELECT AVG(NumberOfOrders) 
FROM (SELECT s.ShipperName, COUNT(o.OrderID) AS NumberOfOrders 
     FROM Orders o LEFT JOIN 
      Shippers s 
      ON o.ShipperID = s.ShipperID 
     GROUP BY s.ShipperName 
    ) t; 

然而,一個更簡單的方式就是自己做了分工:

SELECT COUNT(o.OrderID)/COUNT(DISTINCT s.ShipperName) 
FROM Orders o LEFT JOIN 
    Shippers s 
    ON o.ShipperID = s.ShipperID; 

注:兩個合理的假設是:每個託運人都有自己的ID,所有託運人有至少一個數量級。如果是這樣,你可以簡化爲:

SELECT COUNT(o.OrderID)/COUNT(DISTINCT l.ShipperId) 
FROM Orders o;