MySql Group_concat()함수 사용법.

조회수 2077회

안녕하세요.

지금 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 합침
----------------------------------------------------------------------

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

  • 어떻게 합치고 싶다는 건지,... 현재 설명으로는 이해하기 어렵습니다. 어떤 조건으로 어떤 결과를 원하는지 설명이 좀더 상세하면 좋을것 같습니다. 허대영(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

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할 때 동질성을 표현할 수 있는 별도의 테이블이 필요합니다.

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

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.