프로그래머스 스쿨 / SQL 고득점 Kit 풀이
[유의] GROUP BY "입양 시각 구하기(2)" 문제는 제외
1. SELECT (link)
-
모든 레코드 조회하기
SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID;
-
역순 정렬하기
SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC;
-
아픈 동물 찾기
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION="Sick" ORDER BY ANIMAL_ID;
-
어린 동물 찾기
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION !="Aged" ORDER BY ANIMAL_ID;
-
동물의 아이디와 이름
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS;
-
여러 기준으로 정렬하기
SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME ASC, DATETIME DESC;
-
상위 n개 레코드
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1;
2. SUM, MAX, MIN (link)
-
최댓값 구하기
SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME DESC LIMIT 1;
-
최솟값 구하기
SELECT MIN(DATETIME) FROM ANIMAL_INS;
-
동물 수 구하기
SELECT COUNT(*) FROM ANIMAL_INS;
-
중복 제거하기
SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS WHERE NAME IS NOT NULL;
3. GROUP BY (link)
-
고양이와 개는 몇 마리 있을까
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY CASE ANIMAL_TYPE WHEN 'Cat' THEN 1 WHEN 'Dog' THEN 2 END;
-
동명 동물 수 찾기
SELECT NAME, COUNT(NAME) FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME)>=2 ORDER BY NAME;
-
입양 시각 구하기(1)
SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT FROM ANIMAL_OUTS GROUP BY HOUR(DATETIME) HAVING HOUR >= 9 and HOUR <= 19 ORDER BY HOUR(DATETIME);
4. IS NULL (link)
-
이름이 없는 동물의 아이디
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY ANIMAL_ID ASC;
-
이름이 있는 동물의 아이디
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID ASC;
-
NULL 처리하기
SELECT ANIMAL_TYPE, IFNULL(NAME, "No name"), SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID;
5. JOIN (link)
-
없어진 기록 찾기
SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_OUTS A LEFT JOIN ANIMAL_INS B ON A.ANIMAL_ID=B.ANIMAL_ID WHERE B.ANIMAL_ID IS NULL ORDER BY A.ANIMAL_ID;
-
있었는데요 없었습니다
SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A, ANIMAL_OUTS B WHERE A.ANIMAL_ID=B.ANIMAL_ID AND A.DATETIME>B.DATETIME ORDER BY A.DATETIME ASC;
-
오랜 기간 보호한 동물(1)
SELECT A.NAME, A.DATETIME FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID=B.ANIMAL_ID WHERE B.DATETIME IS NULL ORDER BY A.DATETIME LIMIT 3;
-
보호소에서 중성화한 동물
SELECT B.ANIMAL_ID, B.ANIMAL_TYPE, B.NAME FROM ANIMAL_OUTS B RIGHT JOIN ANIMAL_INS A ON A.ANIMAL_ID=B.ANIMAL_ID WHERE (A.SEX_UPON_INTAKE LIKE '%Intact%') AND (B.SEX_UPON_OUTCOME LIKE '%Spayed%' OR B.SEX_UPON_OUTCOME LIKE '%Neutered%') ORDER BY B.ANIMAL_ID;
6. String, Date (link)
-
루시와 엘라 찾기
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE (NAME LIKE 'Lucy') OR (NAME LIKE 'Ella') OR (NAME LIKE 'Pickle') OR (NAME LIKE 'Rogan') OR (NAME LIKE 'Sabrina') OR (NAME LIKE 'Mitty') ORDER BY ANIMAL_ID;
-
이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE (ANIMAL_TYPE='Dog') AND (NAME LIKE '%EL%') ORDER BY NAME;
-
중성화 여부 파악하기
SELECT ANIMAL_ID, NAME, CASE WHEN (SEX_UPON_INTAKE LIKE '%Intact%') THEN "X" ELSE "O" END FROM ANIMAL_INS ORDER BY ANIMAL_ID;
-
오랜 기간 보호한 동물(2)
SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON A.ANIMAL_ID=B.ANIMAL_ID ORDER BY (B.DATETIME - A.DATETIME) DESC LIMIT 2;
-
DATETIME에서 DATE로 형 변환
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') FROM ANIMAL_INS ORDER BY ANIMAL_ID;