我試圖將某些客戶訂單數據彙總到一張表中進行分析。數據是客戶訂購的產品數量,然後嘗試確定訂單是小訂單,中訂單還是大訂單,然後通過OrderSize
確定他們購買的總產品和訂單的成本。聚合數據的最佳方式 - 更新查詢或子查詢?
小順序 - 1 - 2產品
中等順序 - 3 - 4產品
大訂單 - > = 5個產品
這裏是數據:
CustomerID OrderID OrderSize OrderTotal
1 800 1 $20
2 801 1 $10
3 802 4 $85
1 803 1 $30
2 804 8 $120
3 805 1 $40
下面是表我我試圖構建(更容易只是張貼圖像):
我可以運行這樣的更新查詢來填充選項卡樂:
- 建表 -
CREATE TABLE Customers (
CustomerID varchar(10) PRIMARY KEY,
SmallOrderCount int,
SmallOrderProducts int,
SmallOrderTotal money,
MedOrderCount int,
MedOrderProducts int,
MedOrderTotal money,
LargeOrderCount int,
LargeOrderProducts int,
LargeOrderTotal money
);
- 將獨特的客戶 -
INSERT INTO Customers
SELECT CustomerID FROM Orders GROUP BY CustomerID;
- 更新填充訂單信息 -
UPDATE Customers
SET SmallOrderCount = (SELECT count(*) FROM Orders WHERE OrderSize BETWEEN 1 AND 2 AND Orders.CustomerID = Customers.CustomerID);
UPDATE Customers
SET SmallOrderProducts = (SELECT sum(OrderSize) FROM Orders WHERE OrderSize BETWEEN 1 AND 2 AND Orders.CustomerID = Customers.CustomerID);
UPDATE Customers
SET SmallOrderTotal = (SELECT sum(OrderTotal) FROM Orders WHERE OrderSize BETWEEN 1 AND 2 AND Orders.CustomerID = Customers.CustomerID);
然後我可以對剩下的6列重複這一點。
但是,這似乎很多工作。有沒有辦法使用子查詢來填充我的Customer
表,這可能不太方便?或者我的方法是最直接的?
另一方面:爲什麼要定義'CustomerID varchar(10)'?數據看起來像'integer'應該會做得更好? – 2011-12-31 19:03:17