如何显示共享相同前缀的不同值的计数?

时间:2013-07-25 23:22:35

标签: mysql sql select

我试图计算特定序列发生的次数。说一个列 - 'testC'在表格中 - 'testT'作为字符,如'DS-PP','WQ-PP','FF-PP','DS-PP','DS-PP','FF -PP” 我希望结果像

DS-PP - 3
FF-PP - 2
WQ-PP - 1

我怎样才能做到这一点。到目前为止我已经

SELECT count(testC) from testT where testC like '%-PP%' group by testC

这给了我数,但没有说明。我需要在select中添加一些东西以获得DS-PP等等

注意:testC列可以包含任何内容(它是文本字段) - “DP-PP在这里”。我希望它只显示DP-PP而不是整个句子是可能的。

检查一下 http://sqlfiddle.com/#!2/f0c29/1

2 个答案:

答案 0 :(得分:2)

你不错过WHERE testC条款吗?你错过了选择testC

    SELECT testC, count(testC) from testT WHERE testC like '%-PP%' group by testC

DEMO HERE

你的第二个建议。你可以先找到-PP然后减去这样的字符:

 select substr(TestC, locate('-pp', TestC) - 2, 5) as testc, count(*)
 from testT
 where locate('-pp', TestC) > 2
 group by substr(TestC, locate('-pp', TestC) - 2, 5)

DEMO HERE

答案 1 :(得分:1)

您需要在TestC

中添加select
SELECT TestC, count(testC)
from testT
where testC like '%-PP%'
group by testC

编辑:

绝对是一个更合理的问题。

select substr(TestC, locate('-pp', TestC) - 2, 5), count(*)
from testT
where locate('-pp', TestC) > 2
group by substr(TestC, locate('-pp', TestC) - 2, 5)

这假设您需要'-pp'之前的两个字符。它过滤掉'-pp'在第一个或第二个字符上开始的所有行。