SQL 프로그래머스 | 중복 제거하기 | DISTINCT | NULL을 제외하고 세주는 COUNT( )

    728x90

     

    중복 제거하기

     

    https://school.programmers.co.kr/learn/courses/30/lessons/59408

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL문을 작성해주세요. 
    이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

     

    ▼ DISTINCT  컬럼명, COUNT(컬럼명)

    SELECT COUNT(DISTINCT NAME) count
    FROM ANIMAL_INS

     

    중복되는 이름을 하나로 치게 만들려면 DISTINCT를 사용해야 함.

     

    이 문제에서는 '이름이 NULL인 경우를 집계하지 않아야 한다'는 조건도 있음

    그런데

    이 쿼리문이 조건절에 IS NOT NULL을 넣어주지 않고도 정답인 이유는,

     DISTINCT가 NULL인 행들도 하나의 NULL로 만들어주는데

    COUNT(컬럼명)으로 쓰면 NULL을 제외하고 세주는 특성이 있어서 NULL값이 제외됐기 때문임!


    ▼ WHERE절 IN()함수 서브쿼리

    SELECT COUNT(DISTINCT NAME)
    FROM ANIMAL_INS
    WHERE NAME IN (SELECT NAME
                  FROM ANIMAL_INS
                   WHERE NAME IS NOT NULL
                  )

     

    원소함수 IN()서브쿼리 조합으로 정답을 구한 사람도 있었음

    WHERE NAME IS NOT NULL 대신

    서브쿼리에 NAME만 조회해서 그 NAME이 '존재하는' 행만 뽑아내게 만든 것 같음  


    [참고 게시글]

    DISTINCT와 GROUP BY절의 차이

    [IT 교육/SQL] - SQL | DISTINCT 탐구_뜻밖의 여정 | Group by절과의 사용법 차이

     

    SQL | DISTINCT 탐구_뜻밖의 여정 | Group by절과의 사용법 차이

    0. DISTINCT를 Group by절처럼 사용해도 되는 걸까? 먼저 Group by와 DISTINCT가 무엇인지 간단히 살펴보자. ▶ Group by절 기본구조 및 사용법 : 카테고리 별(소그룹 별) 데이터 결과값을 보고 싶을 때 Group by

    nasena.tistory.com

     

    728x90

    댓글