sql查询以下内容
Posted
技术标签:
【中文标题】sql查询以下内容【英文标题】:sql query for the following 【发布时间】:2015-09-12 17:46:45 【问题描述】:-
PERSON - 电子邮件 ID、电话号码、地址、姓名、年龄、性别
订单 - 订单数量、食谱、配料、电子邮件 ID、订单 ID、订单状态
地址 - 地址、商店位置、手机号码
假设这些是数据库中的三个表和各自的列。
查询每家店销量最高的菜谱的方法是什么?
我使用了这个查询,但它显示了一半的结果。
select distinct Store_Location, Recipe, No_of_Orders
from [ORDER]
join PERSON on [ORDER].Email_ID = PERSON.Email_ID
join ADDRESS on PERSON.Address = ADDRESS.Address
【问题讨论】:
向我们展示你目前拥有的东西 我使用了这个查询,但它显示了一半的结果。从 [ORDER] 中选择不同的 Store_Location、Recipe、No_of_Orders 在 [ORDER] 上加入 PERSON。Email_ID = PERSON.Email_ID 在 PERSON.Address = ADDRESS.Address 上加入 ADDRESS 【参考方案1】:像这样:
select distinct Store_Location, Recipe, No_of_Orders
from [ORDER] As o
join PERSON As p on o.Email_ID = p.Email_ID
join ADDRESS As a on p.Address = a.Address
WHERE No_of_Orders = (
select MAX(o2.No_of_Orders)
from [ORDER] As o2
join PERSON As p2 on o2.Email_ID = p2.Email_ID
join ADDRESS As a2 on p2.Address = a2.Address
Where a2.Address = a.Address
)
此查询通过将原始查询的行与返回当前行存储的最大 No_of_Orders
的子查询进行比较来工作。如果它们匹配,那么这一定是“这家商店销售额最高的食谱”的行,所以我们保留它,否则我们从最终的行集中排除它。
As o
、As o2
位称为“表别名”。它们是一种为查询中表的每种不同用法提供本地名称的方法。它们在这里是必要的,因为在子查询中我们重新查询与外部查询相同的表,并且我们需要能够区分我们所引用的每一列的意思。
【讨论】:
这肯定会给出所需的结果。但我不太明白“哪里”之后的陈述。所以请你解释一下以上是关于sql查询以下内容的主要内容,如果未能解决你的问题,请参考以下文章