[SQL-프로그래머스][LEVEL2]-고양이와 개는 몇마리 있을까/동명 동물 수 찾기

HAHAHA·2021년 4월 10일
0

문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

고양이와 개는 몇마리 있을까? (조건 확인)

동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

  • 개와 고양이를 묶어서 count로 출력 → GROUP BY 사용
  • 조회하는 순서 → ORDER BY 사용

    ORDER BY뒤에 아무것도 안쓰면 DEFAULT값으로 처리
    (디폴트 값이 오름차순(ASC)입니당)
    오름차순 : ORDER BY 'ANIMAL_TYPE' ASC;
    내림차순 : ORDER BY 'ANIMAL_TYPE' DESC

동명 동물 수 찾기 (조건 확인)

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

  • 이름을 두번 작성은 count로 출력 → GROUP BY 사용
  • 이름 없는 동물 집계 제외 → WHERE ~ IS NOT NULL
  • 조회하는 순서 → ORDER BY 사용

< 🍯Honey 팁 >

SELECT문에서는 IS (NOT) NULL 사용
CREATE문에서는 NOT NULL 사용

위에 글이 무슨 내용인가?? 생각이 드실거에요!
SELECT문에서는 'IS'를 넣고, CREATE문에서는 'IS'를 생략한답니다.

  • SELECT 예시
    1) SELECT * FROM ANIMAL_INS WHERE NAME IS NULL
    2) SELECT * FROM ANIMAL_INS WHERE NAME IS NOT NULL
    ✨1번은 NULL값인 것만 가져오는 거에요.
    ✨2번은 NULL값을 제외한 나머지를 가져오는 거에요.

  • CREATE 예시
    CREATE TABEL ANIMAL_INS(
    ANIMAL_ID CHAR(10),
    ANIMAL_TYPE CHAR(10),
    NAME CHAR(10) NOT NULL,
    DATETIME DATE,
    ...(생략)...
    PRIMARY KEY(ANIMAL_ID),
    UNIQUE(NAME)
    ...(생략)...
    );

지금 테이블과 예시가 맞지 않지만,,
예를 들어서 테이블이 위에 처럼 만들어졌다면,
NOT NULL부분은 해당 속성(NAME속성)에는 NULL값이 들어갈 수 없도록 하는 것이구요. UNIQUE부분은 해당속성(NAME속성)은 유일해야 한다. 즉, 중복되어서는 안된다는 것을 의미합니다.

그러면, ANIMAL_INS라는 테이블에서 NAME이라는 곳에는 중북NULL값도 모두 들어갈 수 없게 설정이 되는 겁니다!
여기서 NULL값이 들어가지 않게 하는 부분에서 'IS' NOT NULL이라고 적지 않도록 주의합시당

UNIQUE 무결성 : 해당 속성을 유일해야 한다. (이름은 중복❌)
NULL 무결성 : 해당 속성은 NULL값을 가질 수 없다. (이름은 NULL값❌)


예시

고양이와 개는 몇마리 있을까?

예를 들어 ANIMAL_INS 테이블이 다음과 같다면

고양이는 2마리, 개는 1마리 들어왔습니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

동명 동물 수 찾기

예를 들어 ANIMAL_INS 테이블이 다음과 같다면

  • Raven 이름은 2번 쓰였습니다.
  • Lucy 이름은 3번 쓰였습니다
  • Shadow 이름은 1번 쓰였습니다.

따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

코드 결과물

고양이와 개는 몇마리 있을까?

SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS 'count'
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE

동명 동물 수 찾기

SELECT NAME, COUNT(*) AS 'COUNT'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY (NAME) HAVING count(*) >= 2 ORDER BY (NAME);

0개의 댓글

관련 채용 정보