2012-02-21 70 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