프로그래머스 SQL 고득점 Kit 해답

Julie·2021년 8월 16일
0

MySQL

목록 보기
4/4

프로그래머스 사이트에서 SQL 고득점 Kit를 제공하고 있습니다.
SQL 고득점 Kit를 통해 다양한 SQL 쿼리문을 작성해 볼 수 있습니다.

본 글은 SQL 고득점 Kit 문제에 대한 본인의 해답을 작성한 것입니다.
틀린 부분이 있거나 성능 상 더 좋은 방법이 있다면, 자유롭게 댓글로 토의해요:)

SELECT 문제 해답

모든 레코드 조회하기

SELECT 
    ANIMAL_ID, 
    ANIMAL_TYPE, 
    DATETIME, 
    INTAKE_CONDITION, 
    NAME, 
    SEX_UPON_INTAKE
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
ORDER BY ANIMAL_ID;

여러 기준으로 정렬하기

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;

상위 n개 레코드

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

SUM, MAX, MIN 문제 해답

최대값 구하기

SELECT MAX(DATETIME) AS '시간' 
FROM ANIMAL_INS;

최솟값 구하기

SELECT MIN(DATETIME) AS '시간'
FROM ANIMAL_INS;

동물 수 구하기

SELECT COUNT(*) AS 'count'
FROM ANIMAL_INS;

중복 제거하기

SELECT COUNT(DISTINCT NAME) as 'count'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL;

GROUP BY 문제 해답

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

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(*) > 1
ORDER BY NAME;

입양 시각 구하기 (1)

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

입양 시각 구하기 (2)

SET @HOUR = -1;
SELECT 
    (@HOUR:=@HOUR+1) AS 'HOUR',
    (SELECT COUNT(HOUR(DATETIME))
     FROM ANIMAL_OUTS  
     WHERE HOUR(DATETIME) = @HOUR
    ) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE @HOUR < 23;

IS NULL 문제 해답

이름이 없는 동물의 아이디

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID;

이름이 있는 동물의 아이디

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID;

NULL 처리하기

SELECT 
    ANIMAL_TYPE, 
    CASE
        WHEN NAME IS NULL THEN 'No name'
        ELSE NAME
    END AS NAME,
    SEX_UPON_INTAKE
FROM ANIMAL_INS;

JOIN 문제 해답

없어진 기록 찾기

SELECT outs.ANIMAL_ID, outs.NAME
FROM ANIMAL_OUTS outs
LEFT JOIN ANIMAL_INS ins
ON outs.ANIMAL_ID = ins.ANIMAL_ID
WHERE ins.ANIMAL_ID IS NULL
ORDER BY outs.ANIMAL_ID;

있었는데요 없었습니다

SELECT animal_in.ANIMAL_ID, animal_out.NAME
FROM ANIMAL_INS AS animal_in
INNER JOIN ANIMAL_OUTS AS animal_out
ON animal_in.ANIMAL_ID = animal_out.ANIMAL_ID 
WHERE animal_out.DATETIME < animal_in.DATETIME
ORDER BY animal_in.DATETIME;

오랜 기간 보호한 동물 (1)

SELECT ins.NAME, ins.DATETIME
FROM ANIMAL_INS ins
LEFT JOIN ANIMAL_OUTS outs
ON ins.ANIMAL_ID = outs.ANIMAL_ID
WHERE outs.DATETIME IS NULL
ORDER BY ins.DATETIME
LIMIT 3;

보호소에서 중성화한 동물

SELECT ins.ANIMAL_ID, ins.ANIMAL_TYPE, ins.NAME
FROM ANIMAL_INS ins
INNER JOIN ANIMAL_OUTS outs
ON ins.ANIMAL_ID = outs.ANIMAL_ID
WHERE 
    (ins.SEX_UPON_INTAKE LIKE '%Intact%')
    AND
    (outs.SEX_UPON_OUTCOME NOT LIKE '%Intact%')
ORDER BY ins.ANIMAL_ID;

String, Date 문제 해답

루시와 엘라 찾기

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty');

이름에 el이 들어가는 동물 찾기

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

중성화 여부 파악하기

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

오랜 기간 보호한 동물 (2)

SELECT ins.ANIMAL_ID, ins.NAME
FROM ANIMAL_INS ins
INNER JOIN ANIMAL_OUTS outs
ON ins.ANIMAL_ID = outs.ANIMAL_ID
ORDER BY DATEDIFF(outs.DATETIME, ins.DATETIME) DESC
LIMIT 2;

DATETIME에서 DATE로 형 변환

SELECT 
    ANIMAL_ID, 
    NAME, 
    DATE_FORMAT(DATETIME, '%Y-%m-%d') as '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
profile
Software Engineer

0개의 댓글