SQL实验室查询帮助

时间:2017-09-29 21:46:46

标签: sql ms-access

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,我们还没有在这个类中使用过连接。

1 个答案:

答案 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]));