2013-03-03 83 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