使用GROUPBY SQL显示所有值
以下是模式:使用GROUPBY SQL显示所有值,sql,group-by,Sql,Group By,以下是模式: customers (customerID: integer, fName: string, lName: string) items (itemID: integer, description: string, price: float) orders (orderID: integer, itemID: integer, aID: integer, customerID: integer, date: date) addresses (aID: integer, housenu
customers (customerID: integer, fName: string, lName: string)
items (itemID: integer, description: string, price: float)
orders (orderID: integer, itemID: integer, aID: integer, customerID: integer, date: date)
addresses (aID: integer, housenum: integer, streetName: string, town:string, state: string, zip:integer)
如何列出与其他客户将商品运送到同一城镇的任何客户的城镇、名字和姓氏
当我尝试使用GROUP BY town时,输出只能显示组中的第一个客户,而不能显示所有满意的客户。想想你将如何回答这个问题。任何一个这样的城镇都至少有两位顾客向它下订单。您可以使用带有having子句的聚合查询获取此列表: 现在唯一的问题是哪些客户向这些城镇下了订单:
select distinct a.town, c.fname, c.lname
from customer c join
orders o
on c.customerID = o.customerID join
Addresses a
on o.Aid = a.Aid
where town in (select town
from orders o join
addresses a
on o.Aid = a.Aid
group by town
having count(distinct c.customerId) > 1
)
第一次选择的不同之处在于,每个这样的客户可能有多个记录
虽然这回答了您的问题,但它并不能真正回答真正的业务需求。例如,大多数州都有一个叫做斯普林菲尔德的地方。你真的需要把国家考虑进去。或者用邮政编码代替。如果这是一个真正的商业问题,它将被运送的客户淹没,比如说,假设town field具有一致的值,纽约市。现在我知道它是如何工作的了,但是如果两个客户的名字和姓氏完全相同怎么办?您不能只选择DISTINCT c.fname c.lname,对吗?我想选择DISTINCT customerID,但问题只要求选择town、fname和lname:
select distinct a.town, c.fname, c.lname
from customer c join
orders o
on c.customerID = o.customerID join
Addresses a
on o.Aid = a.Aid
where town in (select town
from orders o join
addresses a
on o.Aid = a.Aid
group by town
having count(distinct c.customerId) > 1
)