2013-07-25 2 views
0

특정 시퀀스가 ​​발생하는 횟수를 계산하려고합니다. 'DS-PP', 'WQ-PP', 'FF-PP', 'DS-PP', 'DS-PP', 'FF'와 같은 문자로 'testT' -PP ' 나는 결과가 나는 그것을 달성 할 수있는 방법동일한 접두사를 공유하는 여러 값의 수를 표시하는 방법은 무엇입니까?

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

처럼되고 싶어요. 지금까지 가지고있어

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

이것은 나에게 카운트를 준다. 그러나 doesnt는 그것을 말한다. DS-PP를 얻기 위해 select에 뭔가를 추가해야합니다.

참고 : testC 열에는 'DP-PP was here'라는 텍스트 (텍스트 필드)가있을 수 있습니다. 나는 그것이 단지 DP-PP를 보여주기를 원한다. 전체 문장이 가능하지는 않다.

확인이 http://sqlfiddle.com/#!2/f0c29/1

+0

SQL은 where 절에 비슷한 조건으로 언급 된 열이 없다는 것을 어떻게 알 수 있습니까? –

+0

실제 질문을하고 적절한 태그를 사용하십시오. 나는 약간의 편집을했지만, 모든 이야기를 깔끔하게 보여주지는 않습니다. * 실제 데이터 * 및 * 현재 쿼리 결과 *를 포함하십시오. - 여기에는 'DP-PP was here'와 같은 예제 데이터가 포함되어야하며 하단의 매우 작은 메모에서 손실됩니다. – user2246674

+0

어쨌든, 내 권장 사항 (de-normalization을 제거하는 스키마를 수정하는 옵션이 아닌 경우)은 중첩 쿼리를 사용하고 ['SUBSTR'] (http://dev.mysql.com/doc/refman/ 5.7/ko/string-functions.html # function_substr)을 선택하십시오. 인덱스 사용에 부정적인 영향을 줄 수 있습니다. – user2246674

답변

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'이 시작되는 모든 행을 필터링합니다.

+0

나는 질문을 업데이 트했습니다. –

+0

감사합니다. :) –

2

을 didnt 당신은 WHERE testC 절을 그리워? 그리고 testC도 선택하지 않았습니다.

SELECT testC, count(testC) from testT WHERE testC like '%-PP%' group by testC 
우선은 그렇게 먼저 다음 빼기 문자를 -PP을 찾을 수 있습니다 두 번째 제안을

DEMO HERE

:

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

+0

의 infront 미안 내가이 질문을하는 동안 –

+0

당신은 또한 열을 놓친 후 놓친 어디에 –

+0

http://sqlfiddle.com/#!2/f0c29/1 –

관련 문제