2013-03-03 82 views
1

使用组所有值这里的模式:显示通过SQL

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城镇时,输出结果只能显示组中的第一位顾客,而不是所有满意的。

回答

0

想想你会如何回答这个问题。任何这样的城镇至少有两位客户向它下订单。

  select town 
      from orders o join 
       addresses a 
       on o.Aid = a.Aid 
      group by town 
      having count(distinct c.customerId) > 1 

现在唯一的问题是客户已经下令这些城镇:第一选择是因为

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 
      ) 

distinct可以使用聚合查询与having条款得到该列表每个这样的客户可能有多个记录。

虽然这回答你的问题,但它并不真正回答真正的业务需求。例如,大多数州都有一个名为“斯普林菲尔德”的地方。你真的需要考虑到这个状态。或者也可以使用邮政编码。如果这是一个真正的商业问题,那么客户就会说,纽约市(假设“城镇”领域具有一致的价值观)会淹没它。

+0

现在我明白它是如何工作的,但如果两个客户完全相同相同的名字和完全相同的姓氏?你不能只是做选择DISTINCT c.fname c.lname,对吧? – user2129724 2013-03-03 21:39:06

+0

我想做SELECT DISTINCT customerID,但问题只是要求选择城镇,fname和lname :( – user2129724 2013-03-03 21:40:00