아이파크
422
2020-07-28 13:34:11
2
341

group by 안에서 case 문


안녕하십니까


sql문에서


A          B                C

1         10               a

2         20               a

1         20               a

3        10                a

2         10               b


select

case when b=20 then count(A) else 0 END as result

from table

group by C


이런식으로 group by 로 걸리진 데이터 안에서 조건문을 걸어 구분 해주고 싶은데

위와 같은 방식으로 하면 b가 20이 아닌경우도 있어서 0으로 값이 나와 버립니다

근데 HAVING 절을 사용하면 안되는게 HAVING 조건절에 또 다 걸러져서 나오기 때문에 저 부분만 써야 하는게 아니고 다른 컬럼에서도 사용되야 하기 때문에 데이터가 사라지기 때문에 안됩니다


다시 결론을 말씀드리면 group by 로 걸리진 데이터들 중에서 조건문을 걸어 카운트를 치고 싶은데 어떻게 하면 되나요?

0
  • 답변 2

  • XeO3
    553
    2020-07-28 13:43:58

    select

    sum(case when b=20 then 1 else 0 END) as result

    from table

    group by C

  • 아이파크
    422
    2020-07-28 13:58:56 작성 2020-07-28 14:00:55 수정됨

    저기서 A가 겹치는 부분을 하나로 쳐줘야 할때는 어떻게 하나요?


    A          B                C

    1         10               a

    2         20               a

    2        20              a

    1         20               a

    3        10                a

    2         10               b


    일 경우에요


    select

    case when b=20 then count(dstinct(A)) else 0 END as result

    from table

    group by C


    이런것 처럼

  • 로그인을 하시면 답변을 등록할 수 있습니다.