살다보면 이런 저런 일이 많다. 쿼리도 짜다보면 이런저런 일이 많다.
이런저런일 하다가 group_concat 으로 묶은 문자열 중에, 특정 문자열이 몇 번인지 확인이 필요 했다.
디비에서는 주로 학급을 예로 많이 들던데 ㅋㅋㅋㅋ
예를 들어서 특정 학생이 100점을 몇번 받았는가를 확인하는 그런거!!를 짜보자.
테이블 셋팅은
idx - 학번
name - 이름
subject - 과목
score - 점수
testdate - 시험친 날
간단하게 이렇게만 하자!
간단하게 학생의 평균 점수는
SELECT AVG(score) FROM STUDENT GROUP BY idx
하면 된다.
자, 그런데 100점을 2번 받은 학생들만 뽑아보도록 해보자. 으트케? 이르케!
SELECT * FROM STUDENT t1 JOIN (SELECT idx, GROUP_CONCAT(score) AS scores FROM STUDENT GROUP BY idx) t2 WHERE ROUND ( ( CHAR_LENGTH( t2.scores ) - CHAR_LENGTH( REPLACE( t2.scores , '100', '' ) ) / CHAR_LENGTH( '100' ) ) ) = 2
자 겁나 쉽지 않은가?
겁나 간단한걸 stackoverflow에서 찾았다!! 갓플로우
다들 소스보시면 아하! 하겠지만, 모르는 사람을 위해 원문 링크는 아래에!!