2012-07-26 84 views
1

假設我有此表客戶訂單:Mysql的GROUP BY類似領域

orderid Name   Email  Address_1  Address_2 City*  Zip* 
--------------------------------------------------------------------------- 
1  James  [email protected] 12 Foo St     Fooville 1001 
2  Alice  [email protected] 92 Bla Road    Sville  3933 
3  James  [email protected] 12 Foo Street    Fooville 1001 
4  james king [email protected] 12    Foo St  Fooville 1001 
5  Anth   [email protected] 12 Foo Street    Stacker 2932 
6  James  [email protected] 12 American St   GiftCity 0283 

爲了節省郵資費用(我們),這將是理想的,如果我們可以發送多個訂單要到同一個人 ,到同一地址放在一張打印單上。爲此,我需要一個唯一的記錄ID爲1,3,4.

CityZip代碼不能由用戶輸入(從下拉列表中選擇)。

理想情況下,我想下面由我的查詢將返回:

orderid Name Email  Address_1  Address_2 City*  Zip* Count 
--------------------------------------------------------------------------- 
1  James [email protected] 12 Foo St     Fooville 1001 3 
2  Alice [email protected] 92 Bla Road    Sville  3933 1 
5  Anth [email protected] 12 Foo Street    Stacker 2932 1 

本質上來說,SQL算法是通過對以下各列類似做一組:NameEmailconcat(Address_1 and Address_2)

的任何建議和解決方案將高度讚賞。

如果有一種方法做

GROUP BY similar((concat(name,email,address_1) 

(的確確是無望的僞代碼抱歉..只是想了解我的想法)。

+2

什麼是「相似」的規則?在你的例子中,'Foo Street'等於'Foo St',這非常值得猜測。 – Vatev 2012-07-26 18:11:33

+0

您每天有多少訂單?你可以做一個人類觀衆手動審查?此外,您可以使用確定Zip + 4代碼的地址驗證服務,然後在Zip + 4代碼上進行比較。 – mellamokb 2012-07-26 18:12:44

+0

如果一個人看到了第一張桌子,他們將能夠輕鬆地繪製出第二張桌子。有沒有辦法通過混合使用mysql函數來做到這一點? – 2012-07-26 18:14:17

回答

1

好,而不是討論下面是一個查詢根據您的要求

select 
    orderid , 
    name , 
    email , 
    address_1 , 
    address_2 , 
    city , 
    zip , 
    count(orderid) 
from test 
group by name 
order by orderid 

帶來了修改此

Name  Email  Address_1 Address_2 City  Zip Count 
1 James  [email protected]  12 Foo St   Fooville  1001 3 
2 Alice  [email protected]  92 Bla Road   Sville   3933 1 
4 James King [email protected]  12 Foo St   Fooville  1001 1 
5 Anth  [email protected] 12 Foo St   Stacker   2932 1