我有多件商品在全国范围内销售和运送。我怎样才能看到每个州最畅销的商品是什么?
CREATE TABLE Customers (
CustomerID Int Not
, Name Varchar(75)
, UserName Varchar(75)
, Password Varchar(75)
, Email Varchar(75)
, PrimaryPhone Varchar(50)
, Primary Key (CustomerID)
)
CREATE TABLE ShippingAddress (
AddressID Int Primary Key
, CustomerID Int
, Street (75)
, State Varchar (75)
, Zip Varchar (75)
,Foreign Key (CustomerID) REFERENCES Customers
)
CREATE TABLE PaymentInfo (
CreditCardNumber Int Primary Key
, CardExpDate Date
, CVVCode Int
, CustomerID Int
, AddressID Int
, Foreign Key (CustomerID) REFERENCES Customers
, Foreign Key (AddressID) REFERENCES Addresses
)
CREATE TABLE Orders (
OrderID Int Primary Key
, OrderDate Date
, CustomerID Int
, TotalPrice Int
, Foreign Key (CustomerID) REFERENCES Customers
)
CREATE TABLE Shipping (
ShippingID Int Primary Key
, OrderID Int
, AddressID Int
, Foreign Key (OrderID) REFERENCES Orders
, Foreign Key (AddressID) REFERENCES Addresses
)
CREATE TABLE OrderPayment (
OrderID Int
, CreditCardNumber Int
, Primary Key (OrderID, CreditCardNumber)
, Foreign Key (OrderID) REFERENCES Orders
, Foreign Key (CreditCardNumber) REFERENCES PaymentInfo
)
CREATE TABLE Inventory (
ItemModelNumber Int Primary Key
, Brand Int
, ItemDescription Text
, StockQuantity Int
)
CREATE TABLE OrderItems (
OrderID Int
, ItemModelNumber Int
, Primary Key (OrderID, ItemModelNumber)
, Foreign Key (OrderID) REFERENCES Orders
, Foreign Key (ItemModelNumber) REFERENCES Inventory
)
CREATE TABLE Sources (
DistributorID Int Primary Key
, DistributorName Varchar(75)
)
CREATE TABLE InventorySource (
ItemModelNumber Int
, DistributorID Int
, RequestedDate Date
, DeliveredDate Date
, RequestedQuantity Int
, Primary key (ItemModelNumber, DistributorID)
, Foreign Key (ItemModelNumber) REFERENCES Inventory
, Foreign Key (DistributorID) REFERENCES Sources
)
GO
CREATE VIEW BestSellers AS(
所以我知道我想从ShippingAddress中选择SELECT DISTINCT状态。然后我想我想从OrderItems表中获取count(ItemModelNumber),OrderID,并将这些列与ShippingAddress表中的Distinct State列连接起来。然后只是关于State的GROUP BY语句。到目前为止这是正确的吗?
答案 0 :(得分:0)
我认为以下查询为每个州提供了最佳项目
注意:我使用的是COUNT(*),因为我没有找到订单的“数量”字段
SELECT best.*
FROM (
SELECT sales.*
, I.ItemDescription
, ROW_NUMBER() OVER(PATITION BY sales.State ORDER BY sales.quantity DESC) AS sort
FROM (
SELECT SA.State
, OI.ItemModelNumber
, COUNT(*) AS quantity
FROM OrderItems OI
INNER JOIN
Shipping S
ON OI.OrderID = S.OrderID
INNER JOIN
ShippingAddress SA
ON S.AddressID = SA.AddressID
GROUP BY SA.State
, OI.ItemModelNumber
) sales
INNER JOIN
Inventory I
ON sales.ItemModelNumber = I.Inventory
) best
WHERE best.sort = 1
我希望这会有所帮助
此致