2012-02-21 69 views
3

我使用SQL齊心協力像這樣的表:SQL - 組由部分字符串在SQL

person   flavour        purchase 
andy   likes-orange_hates-vanilla     $5 
george  likes-orange_hates-icecream     $5 
gena   likes-vanilla_hates-bourban     $2 
gena   likes-vanilla_hates-bourban     $4 

是否有可能從去:

   total 
likes-orange  $10 
likes-vanilla $6 

即使更好的是

   total  av. purchase size  av. purchases per person total people 
likes-orange $10    $5     1      2 
likes-vanilla $6     $3     2      1 

我只能訪問一個phpmyadmin。

+1

這是你查詢的源表或結果? – 2012-02-21 17:23:48

+5

規範你的數據庫。 – YXD 2012-02-21 17:24:47

回答

7

嘗試

select substring_index(flavor,'_',1), sum(purchase) from table group by 1 
+1

爲什麼不能GROUP BY substring_index(flavor,'_',1)? – Kamil 2012-02-21 17:28:54

+2

當SQL語法允許您逐位引用列時,爲什麼還要考慮冗餘(以及更多的出錯機會)? – 2012-02-21 17:50:15

+0

所以這是專欄的位置......很好。這僅僅是MySQL的功能,還是在其他數據庫(例如MSSQL,Sybase,Oracle)中可用? – Kamil 2012-02-21 18:30:23

0

在SQL 2005+

可以使用如下:

Select Tbl1.Email, Count(1) FROM (
    Select substring(EmailAdd,CHARINDEX('@',EmailAdd),Len(EmailAdd)-CHARINDEX('@',EmailAdd)) as 'Email' 
    from TableName 
) Tbl1 Group By Tbl1.Email