개발 Q&A

제목 mysql 쿼리 문 질문합니다.
글쓴이 온더탑 작성시각 2015/05/27 02:10:18
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 12217   RSS
아직까지 이 문제를 해결 못해서 퇴근을 못하고 있습니다. ㅠ_ㅠ

A | B | C 라는 필드가 있고 각각의 A,B,C필드에는 1-15사이의 값이 들어갑니다.

쿼리를 이용해서 해당 필드의 값이
A,B,C 필드의 1-15까지의 각각의 값이 몇개인지 구해야 합니다.

EX)
id | A | B | C
1 | 1  | 5 | 3
2 | 1  |10 | 10
3 | 2  |12 | 15
4 | 3  | 5 | 3
다음과 값이 들어가 있을 경우에 쿼리의 결과 값이 아래와 같으면 됩니다.

A 필드의 1=>2
A 필드의 2=>1
A 필드의 3=>1
A 필드의 4=>0
A 필드의 5=>0
A 필드의 6=>0
A 필드의 7=>0
A 필드의 8=>0
A 필드의 9=>0
A 필드의 10=>0
A 필드의 11=>0
A 필드의 12=>0
A 필드의 13=>0
A 필드의 14=>0
A 필드의 15=>0

B 필드의 1=>0
B 필드의 2=>0
B 필드의 3=>0
B 필드의 4=>0
B 필드의 5=>2
B 필드의 6=>0
B 필드의 7=>0
B 필드의 8=>0
B 필드의 9=>0
B 필드의 10=>1
B 필드의 11=>0
B 필드의 12=>1
B 필드의 13=>0
B 필드의 14=>0
B 필드의 15=>0

C 필드의 1=>0
C 필드의 2=>0
C 필드의 3=>2
C 필드의 4=>0
C 필드의 5=>0
C 필드의 6=>0
C 필드의 7=>0
C 필드의 8=>0
C 필드의 9=>0
C 필드의 10=>1
C 필드의 11=>0
C 필드의 12=>0
C 필드의 13=>0
C 필드의 14=>0
C 필드의 15=>1

혹시 아시는분 계시면 답변 부탁드립니다.

아래와 같이 했을 경우에 원하는 형식으로 값이 나옵니다 하지만 이런 방식이 아닌 것 같아요 ㅠ_ㅠ
 
select
        count(if(A=25,1,NULL)),
        count(if(A=26,1,NULL)),
        count(if(A=27,1,NULL)),
        count(if(A=28,1,NULL)),
        count(if(A=29,1,NULL)),
        count(if(A=30,1,NULL)),
        count(if(A=31,1,NULL)),
        count(if(A=32,1,NULL)),
        count(if(A=33,1,NULL)),
        count(if(A=34,1,NULL)),
        count(if(A=35,1,NULL)),
        count(if(A=36,1,NULL)),
        count(if(A=37,1,NULL)),
        count(if(A=38,1,NULL)),
        count(if(A=39,1,NULL)),
        count(if(A=40,1,NULL)),
        count(if(A=41,1,NULL)),
        count(if(A=42,1,NULL)),
        count(if(A=43,1,NULL)),
        count(if(A=44,1,NULL)),
        count(if(A=45,1,NULL)),
 
        count(if(B=25,1,NULL)),
        count(if(B=26,1,NULL)),
        count(if(B=27,1,NULL)),
        count(if(B=28,1,NULL)),
        count(if(B=29,1,NULL)),
        count(if(B=30,1,NULL)),
        count(if(B=31,1,NULL)),
        count(if(B=32,1,NULL)),
        count(if(B=33,1,NULL)),
        count(if(B=34,1,NULL)),
        count(if(B=35,1,NULL)),
        count(if(B=36,1,NULL)),
        count(if(B=37,1,NULL)),
        count(if(B=38,1,NULL)),
        count(if(B=39,1,NULL)),
        count(if(B=40,1,NULL)),
        count(if(B=41,1,NULL)),
        count(if(B=42,1,NULL)),
        count(if(B=43,1,NULL)),
        count(if(B=44,1,NULL)),
        count(if(B=45,1,NULL)),
 
        count(if(C=25,1,NULL)),
        count(if(C=26,1,NULL)),
        count(if(C=27,1,NULL)),
        count(if(C=28,1,NULL)),
        count(if(C=29,1,NULL)),
        count(if(C=30,1,NULL)),
        count(if(C=31,1,NULL)),
        count(if(C=32,1,NULL)),
        count(if(C=33,1,NULL)),
        count(if(C=34,1,NULL)),
        count(if(C=35,1,NULL)),
        count(if(C=36,1,NULL)),
        count(if(C=37,1,NULL)),
        count(if(C=38,1,NULL)),
        count(if(C=39,1,NULL)),
        count(if(C=40,1,NULL)),
        count(if(C=41,1,NULL)),
        count(if(C=42,1,NULL)),
        count(if(C=43,1,NULL)),
        count(if(C=44,1,NULL)),
        count(if(C=45,1,NULL))
 
      from tname



 
 다음글 쿼리스트링으로 json가져오기에 대해 문의 합니다.. (3)
 이전글 용량이 큰 txt 파일을 read 해 배열에 넣어서 d... (8)

댓글

lovelywook / 2015/05/27 09:02:19 / 추천 0

정확히는 모르겠지만 대충 group by 를 사용하면 안될까 생각이 드네요.
SELECT
      a,
      COUNT(a) AS a_cnt
FROM
      tbl
GROUP BY a