MySql Group_concat()함수 사용법.


안녕하세요.

지금 group_concat()땜에 삽질중입니다.

일단

select 
    group_concat(cu1.cu_inflow_type),count(cu1.cu_inflow_type)
    from cu_test cu1
    left join cu_test cu2
    on cu2.seq=cu1.seq
    group by cu1.cu_inflow_type 

결과:

======================================================================
group_concat(cu1.cu_inflow_type)    |    count(cu1.cu_inflow_type)
----------------------------------------------------------------------
001,001,001,001,001,001,001,00..    | 27
002,002                             | 2
003,003                             | 2 
004,004,004                         | 3
005                                 | 1
006                                 | 1
----------------------------------------------------------------------

이런 기본적인 결과가 나오는데요.

제가 원하는 결과는 바로 아래처럼

======================================================================
group_concat(cu1.cu_inflow_type)    |    count(cu1.cu_inflow_type)
----------------------------------------------------------------------
001,001,001,001,001,001,001,00..    | 27
002,002,003,003                     | 4             <-- 002와 003 합침
004,004,004                         | 3
005,006                             | 2             <-- 005와 006 합침
----------------------------------------------------------------------

이런 결과를 출력시키고싶습니다. 근데 어떻게 해야하는지 모르겠습니다. ㅠㅠ

  • 2016년 08월 19일에 작성됨

  • 어떻게 합치고 싶다는 건지,... 현재 설명으로는 이해하기 어렵습니다. 어떤 조건으로 어떤 결과를 원하는지 설명이 좀더 상세하면 좋을것 같습니다.    허대영(Daeyoung Heo)   2016.8.21 11:09     
  • 네 죄송합니다. 다시한번 봐주세요!    Gddong   2016.8.22 13:35     
  • (2,3) (5,6) 과 같이 합쳐지는 규칙이 있나요? 아니면 임의로 합치려고 하는건가요?    허대영(Daeyoung Heo)   2016.8.23 08:01     
  • 네 임의로 합치려고합니다.    Gddong   2016.8.23 10:37     
조회수 171


1 답변


좋아요
1
싫어요
채택취소하기

cu_inflow_type 이 나열형으로 더이상 변화가 없을 거라는 전제하에서 다음과 같이 해볼 수 있을 것 같습니다.

SELECT 
    group_concat(cu1.cu_inflow_type),count(cu1.cu_inflow_type)
FROM cu_test cu1
  LEFT JOIN cu_test cu2
    ON cu2.seq=cu1.seq
GROUP BY (CASE
            WHEN  cu1.cu_inflow_type  = '003' THEN '002'
            WHEN  cu1.cu_inflow_type  = '006' THEN '005'
            ELSE cu1.cu_inflow_type 
          END)

GROUP BY 절에서 cu_inflow_type003일 경우 002와 같이 그룹핑하기 위해서 값을 002로 다루도록 하고, 006의 경우도 005와 같이 그룹핑할 수 있도록 값을 005로 다루도록 합니다. 그 외의 값은 원래의 값을 사용하도록 하여 GROUP 하도록 하는 것입니다.

위 방법은 질문에서 언급한 cu_inflow_type이 한정되었을 때 가능하며, 만약 더욱 많아진다면 cu_inflow_type 값이 GROUP할 때 동질성을 표현할 수 있는 별도의 테이블이 필요합니다.

  • 2016년 08월 23일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 정말 감사합니다 ㅠㅠ    Gddong   2016.8.23 14:33     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close