将不同的群体分组并统计?

时间:2014-04-22 00:48:07

标签: mysql sql

我有以下查询:

  SELECT owner,
         typeOwner,
         type,
         count(*) AS count
    FROM myTable 
GROUP BY typeOwner 
ORDER BY count DESC 
   LIMIT 0, 30

现在,typeOwner values = '<test>a</test>'但有时候typeOwner字段会有一些其他字符串,例如'<test>b</test>,我怎样才能让此查询将<test>b</test>计为一组'<test>a</test>

我想为此做一个例外,我的意思是typeOwner <test>a</test>typeOwner <test>b</test>应该算作一行有两个计数。

这是一个小提琴:http://sqlfiddle.com/#!2/70053/1,看看

实际上这些应按<type></type><aId></aId>

分组

2 个答案:

答案 0 :(得分:1)

  

“实际上这些应按”

分组

你可以像GROUP BY那样相对丑陋的东西:

GROUP BY LEFT(typeOwner, position('<xType>' in typeOwner) -1)

但是你可能会以某种方式预处理数据。我不确定MySQL如何处理xml,但是在SQL服务器中,如果我需要以任何频率进行这种处理,我可能会将XML值提取到第一类关系字段中。

sqlfiddle.com

答案 1 :(得分:0)

根据你的sqlfiddle,这是有效的

SELECT 
left(typeOwner, instr(typeOwner, '<xType>')-1) as typeOwner,
owner,type, count(*) as count 
FROM `test` 
GROUP BY left(typeOwner, instr(typeOwner, '<xType>')-1)  
ORDER BY count DESC 
LIMIT 0 , 30