🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/💙프로그래머스

[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가 있다.