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的数量大于该餐厅的菜D1平均数量的客户的客户编号(CNum)。”
我遇到麻烦的另一个是非常类似的
“获取餐厅编号(RNum),这些餐厅的菜D1订单的平均数量小于从餐厅R10订购的任何菜的最大数量。”
我给了#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,并且我们还没有在这个类中使用joins。
发布于 2017-09-30 08:45:39
对于第一个问题:
构建一个聚合查询,返回每个餐厅和菜肴的平均数量。
构建一个聚合查询,返回每个客户、餐厅和菜肴的总数量。
构建一个查询,将restaurant和dish字段上的前两个连接起来。
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]));
https://stackoverflow.com/questions/46497322
复制相似问题