ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] 프로그래머스 2단계 SQL문제 모음
    🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/💙프로그래머스 2021. 11. 5. 17:23

    2단계

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

    SELECT ANIMAL_TYPE, COUNT(*) FROM ANIMAL_INS
    GROUP BY ANIMAL_TYPE
    ORDER BY ANIMAL_TYPE ASC

     

    2. 루시와 엘라 찾기

    SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
    FROM ANIMAL_INS
    WHERE NAME IN ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")
    ORDER BY ANIMAL_ID ASC

    IN을 사용한다. 

     

    3. 최솟값 구하기

    SELECT MIN(DATETIME) FROM ANIMAL_INS

     

    4. 동명 동물 수 찾기

    SELECT NAME, COUNT(*) AS COUNT FROM ANIMAL_INS
    GROUP BY NAME
    HAVING COUNT(NAME) >= 2
    ORDER BY NAME ASC

    COUNT(*)라고 하면 컬럼에 COUNT(*)라고 나오기 때문에, AS를 이용해 COUNT라고 바꿔준다.

    GROUP으로 묶어서 조건을 줄 때는 HAVING을 쓴다.

     

    5. 이름이 el이 들어가는 동물 찾기

    SELECT ANIMAL_ID, NAME 
    FROM ANIMAL_INS
    WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%'
    ORDER BY NAME ASC

    LIKE를 사용한다. _는 글자수를 지정한다.  %는 글자숫자를 정해주지 않는다.

     

    6. 동물 수 구하기

    SELECT COUNT(*) AS COUNT FROM ANIMAL_INS

     

    7. 입양 시각 구하기 (1)

    SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT FROM ANIMAL_OUTS
    GROUP BY HOUR
    HAVING HOUR BETWEEN 9 AND 19
    ORDER BY HOUR ASC

    COUNT(*) : 널값도 포함한다.

    COUNT(DATETIME) : 널값을 포함하지 않는다. 널값 제외!

    SELECT에서 AS로 별명을 지었으면 아래에서는 별명을 사용할 수 있다.

    BETWEEN a AND b 사용하기!

     

    8. NULL 처리하기

    SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
    ORDER BY ANIMAL_ID ASC

    IFNULL(컬럼명, '채울값') : 널값이면 대체할 값

     

    9. 중성화 여부 파악하기

    SELECT ANIMAL_ID, NAME, CASE 
        WHEN SEX_UPON_INTAKE LIKE "%Neutered%" OR SEX_UPON_INTAKE LIKE "%Spayed%" 
        	THEN "O" 
        ELSE 'X' 
        END AS "중성화" 
    FROM ANIMAL_INS

    CASE ~ WHEN ~ THEN ~ ELSE ~ END

     

    CASE 컬럼  

    WHEN 조건1 THEN 값1 

    WHEN 조건2 THEN 값2 

    ELSE 값3 

    END 

     

    10. 중복제거하기

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

    동물의 이름 개수를 조회하는 것이기 때문에, NAME에 COUNT함수를 적용하는데, 

    중복데이터를 제거하고자 하므로 DISTINCT를 붙여준다.

    COUNT(*)는 NULL인 것도 포함하고, COUNT(NAME)은 NAME이 NULL이 아닌 것을 포함한다.

    DISTINCT는 중복을 제거한다. 여기에 NULL이 아닌 것을 비교하기 위해 IS NOT NULL을 추가한다.

     

    11. DATETIME에서 DATE로 형변환

    SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, "%Y-%m-%d") AS "날짜" FROM ANIMAL_INS
    ORDER BY ANIMAL_ID ASC

    DATE_FORMAT(DATE, 형식)을 통해 DATE의 형식을 바꿀 수 있다.
    형식에는 %Y(4자리 연도), %y(2자리 연도), %m(월), %d(일), %H(24시간), %h(12시간), %i%s가 있다.

     

     

    댓글

ahntoday