sql查询以下内容: 个人-电子邮件ID、电话号码、地址、姓名、年龄、性别 订单-订单号、配方、配料、电子邮件ID、订单ID、订单状态 地址-地址、门店位置、手机号码

sql查询以下内容: 个人-电子邮件ID、电话号码、地址、姓名、年龄、性别 订单-订单号、配方、配料、电子邮件ID、订单ID、订单状态 地址-地址、门店位置、手机号码,sql,sql-server,Sql,Sql Server,假设这是数据库中的三个表和各自的列 要获得每家商店中销售额最高的配方,需要什么查询 我使用了这个查询,但它显示了一半的结果 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 像这样: select distinc

假设这是数据库中的三个表和各自的列

要获得每家商店中销售额最高的配方,需要什么查询


我使用了这个查询,但它显示了一半的结果

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
像这样:

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\u of_Orders
。如果它们匹配,那么这必须是“本店销售额最高的配方”的行,因此我们保留它,否则我们将其从最终行集中排除


As o
As o2
位称为“表别名”。它们是一种为查询中表的每个不同用法指定本地名称的方法。它们在这里是必要的,因为在子查询中,我们正在重新查询与外部查询中相同的表,并且我们需要能够区分我们所引用的每一列所指的表。

向我们展示您到目前为止的情况。我使用了此查询,但它显示了一半的结果。在[ORDER]上的[ORDER]加入人中选择不同的门店位置、配方、订单数量。Email\u ID=PERSON.Email\u ID加入人的地址。ADDRESS=ADDRESS.ADDRESS这肯定会给出所需的结果。但是我不能完全理解“where”之后的陈述。所以请你解释一下好吗