안녕하세요 코북입니다. 오늘은 프로그래머스에서 SQL 기본 문제들을 풀어봤습니다. 쉬운 문제라도 실제로 생각하고 적으면서 풀어보는 것과 눈으로만 보는 것은 큰 차이가 있는 것 같습니다. 오랜만에 문제 풀면서 재밌고 유익한 시간이었습니다. 너무 쉬운 문제들은 가져오지 않았고, ★이 있는 문제들은 틀렸거나 놓친 부분이 있는 문제들이었습니다.
1. SELECT
1-1. ★ 어린 동물 찾기, NOT IN
동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION NOT IN ('Aged')
ORDER BY ANIMAL_ID
1-2. 여러 기준으로 정렬하기
동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC
1-3. 상위 N개 레코드, LIMIT
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
MySQL
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
MSSQL
SELECT top 1 NAME
FROM ANIMAL_INS
ORDER BY DATETIME
2. SUM, MAX, MIN
2-1. ★ 최댓값 구하기, MAX
가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
SELECT MAX(DATETIME) AS '시간'
FROM ANIMAL_INS
2-2. 최솟값 구하기, MIN
동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
SELECT MIN(DATETIME) AS '시간'
FROM ANIMAL_INS
2-3. 중복 제거하기, DISTINCT
동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
SELECT COUNT(DISTINCT NAME) AS 'count'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
3. GROUP BY
3-1. ★ 고양이와 개는 몇 마리 있을까
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID) AS 'count'
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN ('Cat','DoG')
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
놓친 점 : IN을 사용하지 않고 풀었습니다. 문제를 꼼꼼하게 봐야겠습니다..
3-2. 동명 동물 수 찾기
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
SELECT NAME, COUNT(NAME) AS 'COUNT'
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT >= 2
ORDER BY NAME
3-3. 입양 시각 구하기(1)
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SELECT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR < 20
ORDER BY HOUR
SELECT HOUR(DATETIME) AS 'HOUR', COUNT(HOUR(DATETIME)) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9
AND HOUR(DATETIME) < 20
GROUP BY HOUR
ORDER BY HOUR
3-4. ★★ 입양 시각 구하기(2), 재귀
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
WITH RECURSIVE TEMP_TABLE AS(
SELECT 0 AS H
UNION ALL
SELECT H+1
FROM TEMP_TABLE
WHERE H<23)
SELECT H, COUNT(ANIMAL_ID)
FROM TEMP_TABLE
LEFT JOIN ANIMAL_OUTS
ON HOUR(DATETIME) = TEMP_TABLE.H
GROUP BY H
ORDER BY H
'DataBase' 카테고리의 다른 글
[MSSQL/MySQL] 비교 연산자 <>, != (0) | 2022.03.29 |
---|---|
[MySQL/MSSQL] 프로그래머스 SQL문제 풀이#2 (0) | 2022.03.03 |
[MSSQL] 인덱스(INDEX) #1 + 페이지(Page) (0) | 2022.02.28 |
[MSSQL] 트랜잭션과 @@TRANCOUNT (0) | 2022.02.25 |
[MSSQL] 프로시저 (PROCEDURE) (0) | 2022.02.24 |