프로그래머스 사이트에서 SQL 고득점 Kit를 제공하고 있습니다.
SQL 고득점 Kit를 통해 다양한 SQL 쿼리문을 작성해 볼 수 있습니다.
본 글은 SQL 고득점 Kit 문제에 대한 본인의 해답을 작성한 것입니다.
틀린 부분이 있거나 성능 상 더 좋은 방법이 있다면, 자유롭게 댓글로 토의해요:)
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;
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;
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;
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;
SELECT
HOUR(DATETIME) AS 'HOUR',
COUNT(*) AS 'COUNT'
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR BETWEEN 9 AND 19
ORDER BY HOUR;
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;
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;
SELECT
ANIMAL_TYPE,
CASE
WHEN NAME IS NULL THEN 'No name'
ELSE NAME
END AS NAME,
SEX_UPON_INTAKE
FROM ANIMAL_INS;
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;
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;
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty');
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;
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;
SELECT
ANIMAL_ID,
NAME,
DATE_FORMAT(DATETIME, '%Y-%m-%d') as '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;