【发布时间】:2017-07-08 02:59:10
【问题描述】:
我真的被一个问题困住了,需要一点帮助。这是问题陈述:
“编写将显示所有客户、所有订单总数、订单数量、每个订单的平均总数、每个订单的平均商品数量(带小数点)、最大订单总数和每个客户的最小订单总数。即使客户没有下订单,也要显示每个客户。"
这些是表格:
我已经走到这一步了,我对最大订单总数感到困惑。我正在考虑最高和最低订单总数的子查询,但我无法使其工作。
SELECT
TC.intCustomerID
,TC.strLastName + ',' + ' ' + TC.strFirstName AS strCustomerName
,ISNULL(SUM( TCOI.intQuantity * TI.monPrice), 0) AS monOrderTotals
,COUNT(DISTINCT TCO.intOrderIndex) AS intNumberOfOrders
,ISNULL(SUM(TCOI.intQuantity * TI.monPrice) / COUNT(DISTINCT TCO.intOrderIndex), 0) AS monAverageOrderTotals
,(SELECT MAX(TCOI.intQuantity * TI.monPrice)
FROM TItems AS TI, TCustomerOrderItems AS TCOI
WHERE TI.intItemID = TCOI.intItemID
-- Cross-query join with two columns
-- AND TC.intCustomerID = TCOI.intCustomerID
-- AND TCO.intOrderIndex = TCOI.intOrderIndex
----GROUP BY
-- TCOI.intCustomerID
--,TCOI.intOrderIndex
) AS monMostExpensiveOrder
FROM
TCustomers AS TC
LEFT OUTER JOIN
TCustomerOrders AS TCO ON (TC.intCustomerID = TCO.intCustomerID)
LEFT OUTER JOIN
TCustomerOrderItems AS TCOI ON (TCO.intOrderIndex = TCOI.intOrderIndex)
LEFT OUTER JOIN
TItems AS TI ON (TCOI.intItemID = TI.intItemID)
GROUP BY
TC.intCustomerID
,TC.strLastName
,TC.strFirstName
任何见解将不胜感激。
【问题讨论】:
-
当然可以,但有时我会这样写,因为它们在我的大脑中更有意义,但当我弄清楚事情时,我会回去正确地写它们。感谢您的反馈。
-
当商品价格发生变化时你会怎么做? “当前价格”和“订购时的价格”不是一回事,因为一个可以更改,另一个不能。所以你不能将价格标准化到项目表中。您可能希望它出现在 OrderItem 表中。
-
我不太担心当商品价格发生变化时该怎么办。这个模式被定义为问题陈述的一部分,而不是我自己想出的。我必须照原样处理这些表格。
标签: sql sql-server database aggregate-functions