使用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
              )