首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Lab查询帮助

SQL Lab查询帮助
EN

Stack Overflow用户
提问于 2017-09-30 05:46:46
回答 1查看 70关注 0票数 0
代码语言:javascript
复制
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一次机会,并提出了以下几点:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 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]));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46497322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档