我对我在家庭作业上遇到的这个问题失去了理智。 不,我不想要你给我答案!我只是想被推向正确的方向,因为我一直在努力解决这个问题。
这是一个问题。
编写一个返回三列的SELECT语句:EmailAddress,OrderID和每个客户的订单总数。为此,您可以按EmailAddress和OrderID列对结果集进行分组。此外,您必须从OrderItems表中的列计算订单总数。
编写第二个SELECT语句,该语句在其FROM子句中使用第一个SELECT语句。主查询应返回两列:客户的电子邮件地址和该客户的最大订单。为此,您可以通过EmailAddress列对结果集进行分组。
这是我到目前为止所做的:
SELECT EmailAddress, OrderID, SUM(ItemTotal * Quantity) AS OrderTotal
FROM Customers JOIN
(SELECT OrderID, MAX(ItemTotal * Quantity) AS LargestOrder
FROM Orders, OrderItems
WHERE OrderItems.OrderID = Orders.OrderID)
GROUP BY EmailAddress;
表格的设置方式是:
Customers Table:
CustomerID, EmailAddress, Password, FirstName, LastName, ShippingAddressID, BillingAddressID
OrderItems Table:
ItemID, OrderID, ProductID, ItemPrice, DiscountAmount, DiscountTotal, PriceTotal, ItemTotal, Quantity
Order Table:
OrderID, CustomerID, OrderDate, ShipAmount, TaxAmount, ShipDate, ShipAddressID, CardType, CardNumber,CardExpires, BillingAddressID.
非常感谢任何帮助!
答案 0 :(得分:1)
您缺少联接中的ON以及联接中的选择的别名。您还需要订单来源,因此我将其添加到您的查询中。
SELECT c.emailaddress,
Max(OrderCost) AS LargestOrder
FROM customers c
INNER JOIN orders o
ON c.customerid = o.customerid
JOIN (SELECT orders.orderid,
itemtotal * quantity AS OrderCost
FROM orders,
orderitems
WHERE orderitems.orderid = orders.orderid)largest
ON largest.orderid = o.orderid
GROUP BY c.emailaddress
答案 1 :(得分:0)
当任务需要使用选择表单时,选择一个解决方案可能是Common Table Expression所谓的CTE允许您定义一个结果,您可以在以后的quires中进一步使用该结果。
示例:
WITH Sales_CTE (SalesPersonID, NumberOfOrders)
AS
(
SELECT SalesPersonID, COUNT(*)
FROM Sales.SalesOrderHeader
WHERE SalesPersonID IS NOT NULL
GROUP BY SalesPersonID
)
SELECT AVG(NumberOfOrders) AS "Average Sales Per Person"
FROM Sales_CTE;
GO
所以要解决你的问题:
WITH ORDER_TOTAL (EmailAddress, OrderID, OrderTotal)
AS
(
SELECT EmailAddress, OrderID, SUM(i.ItemTotal) as OrderTotal
FROM Orders o INNER JOIN OrderItems i on o.OrderID = i.OrderID
GROUP BY EmailAddress, OrderID
) SELECT EmailAddress, MAX(OrderTotal) as MaxOrder
FROM ORDER_TOTAL
GROUP BY EmailAddress;
答案 2 :(得分:0)
SELECT k.email_address, MAX(k.order_total) AS largest_order
FROM (SELECT c.email_address, o.order_id, ((oi.item_price-oi.discount_amount)*oi.quantity) AS order_total
FROM customers c JOIN orders o
ON c.customer_id =o.customer_id
JOIN order_items oi
ON o.order_id = oi.order_id
GROUP BY c.email_address, o.order_id) as k
GROUP BY k.email_address;
答案 3 :(得分:0)
基于问题,第一个查询是第二个查询的子查询。
SELECT email_address, MAX(order_total) as max_order_total,MIN(order_id) as min_order_id
FROM(
SELECT email_address, order_items.order_id, SUM((item_price-discount_amount)*quantity) as order_total
FROM customers INNER JOIN orders
ON customers.customer_id=orders.customer_id
INNER JOIN order_items
ON orders.order_id=order_items.order_id
GROUP BY email_address,order_items.order_id
)v
GROUP BY email_address
ORDER BY max_order_total DESC