CNum DNum RNum Quant Price
C100 D1 R10 2 8.99
C100 D1 R40 7 9.99
C200 D3 R10 4 16.99
C200 D3 R20 2 15.99
C200 D3 R30 2 17.99
C200 D3 R40 5 19.99
C200 D3 R50 6 18.99
嘿伙计们,上表是命名"订单。"我有一些问题,我试图解决我正在服用的数据库管理课程的实验室。这些问题中的一些问题给了我一些问题,如果你们中的一些人不介意帮助我或者让我通过一些很棒的问题。我现在坚持的那个是
"为从某餐厅订购菜D1的客户获取客户编号(CNum),其数量大于该餐馆的菜D1的平均数量。"
另一个我遇到麻烦的是非常相似的
"获得餐馆数量(RNum)的餐馆,其菜单D1的平均数量小于从R10&#34餐厅订购的任何菜肴的最大数量;
我在这里给了#2一个镜头并想出了以下内容:
SELECT DISTINCT O.RNum
FROM Orders AS O
WHERE (O.DNum = 'D1')
AND EXISTS
(SELECT AVG(O.Quant) AS AvgQuant
FROM Orders AS O
WHERE EXISTS
(SELECT MAX(O.Quant) AS MaxQuant
FROM Orders AS O
WHERE (O.RNum = 'R10')))
考虑到这一点,我目前认为这个查询是不正确的,因为我没有指定AvgQuant必须比MaxQuant少,并且不确定正确的语法是什么。所以我的问题是,如何表达AvgQuant必须小于MaxQuant,我们还没有在这个类中使用过连接。
答案 0 :(得分:0)
对于第一个问题:
构建一个汇总查询,返回每个餐厅和菜肴的平均数量。
构建一个汇总查询,返回每个客户,餐厅和菜肴的总金额。
建立一个连接餐馆和菜肴领域前两个的查询
SELECT Query2.CNum, Query2.RNum, Query2.DNum, Query2.Cust_Rest_Dish_Sum
FROM Query2 INNER JOIN Query1 ON (Query2.DNum = Query1.DNum) AND (Query2.RNum = Query1.RNum)
WHERE (((Query2.Cust_Rest_Dish_Sum)>[Rest_Dish_Avg]));
没有JOIN条款:
SELECT Query2.CNum, Query2.RNum, Query2.DNum, Query2.Cust_Rest_Dish_Sum, Query1.RNum, Query1.DNum
FROM Query2, Query1
WHERE (((Query2.Cust_Rest_Dish_Sum)>[Rest_Dish_Avg]) AND ((Query1.RNum)=[Query2].[RNum]) AND ((Query1.DNum)=[Query2].[DNum]));
数据样本似乎不足以测试查询。没有记录会返回。所以我添加了另一条记录,它是查询中返回的唯一客户
CNum DNum RNum Quant Price
C200 D1 R10 5 22.49
对于问题2考虑这个问题 - 没有使用加入,但确实应该:
SELECT DISTINCT Query4.RNum, Query4.DNum, Query4.AvgOfQuant, Query3.MaxOfQuant
FROM (SELECT Orders.RNum, Max(Orders.Quant) AS MaxOfQuant
FROM Orders
GROUP BY Orders.RNum
HAVING (((Orders.RNum)="R10"))) AS Query3, (SELECT Orders.RNum, Orders.DNum, Avg(Orders.Quant) AS AvgOfQuant
FROM Orders
GROUP BY Orders.RNum, Orders.DNum) AS Query4
WHERE (((Query4.DNum)="D1") AND ((Query4.AvgOfQuant)<[MaxOfQuant]));