我有以下查询:
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>
答案 0 :(得分:1)
“实际上这些应按”
分组
你可以像GROUP BY那样相对丑陋的东西:
GROUP BY LEFT(typeOwner, position('<xType>' in typeOwner) -1)
但是你可能会以某种方式预处理数据。我不确定MySQL如何处理xml,但是在SQL服务器中,如果我需要以任何频率进行这种处理,我可能会将XML值提取到第一类关系字段中。
答案 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