본문 바로가기
카테고리 없음

[코딩테스트] 프로그래머스 스쿨 - MySQL

by Hessedist 2022. 9. 29.

코딩테스트 | 프로그래머스 스쿨 - MySQL

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr


 

SELECT

  • 어린 동물 찾기
SELECT ANIMAL_ID, NAME 
FROM ANIMAL_INS
WHERE INTAKE_CONDITION <> 'Aged'

 

  • 동물의 아이디와 이름
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID ASC

 

  • 여러 기준으로 정렬하기
SELECT ANIMAL_ID, NAME, DATETIME 
FROM ANIMAL_INS 
ORDER BY NAME ASC, DATETIME DESC

 

  • 상위 n개 레코드
SELECT NAME 
FROM ANIMAL_INS
ORDER BY DATETIME 
LIMIT 1

 

 

SUM, MAX, MIN 

  • 최댓값 구하기 
SELECT DATETIME AS 시간 
FROM ANIMAL_INS 
ORDER BY DATETIME DESC
LIMIT 1

 

  • 최솟값 구하기 
SELECT MIN(DATETIME) AS 시간 
FROM ANIMAL_INS

 

  • 동물 수 구하기 
SELECT COUNT(*)
FROM ANIMAL_INS

 

  • 중복 제거하기
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL

 

 

GROUP BY

  • 고양이와 개는 몇 마리 있을까
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

 

  • 동명 동물 수 찾기
SELECT NAME, COUNT(NAME) as COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL 
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)

 

  • 입양 시각 구하기(2)
SET @hour := -1;

SELECT (@hour := @hour + 1) as HOUR, 
(SELECT COUNT(*) 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

 

  • 이름이 있는 동물의 아이디 
SELECT ANIMAL_ID
FROM ANIMAL_INS 
WHERE NAME IS NOT NULL

 

  • NULL 처리하기 
SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

 

JOIN

  • 없어진 기록 찾기
SELECT OUTS.ANIMAL_ID, OUTS.NAME 
FROM ANIMAL_OUTS OUTS
LEFT OUTER JOIN ANIMAL_INS INS 
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.ANIMAL_ID is NULL
ORDER BY OUTS.ANIMAL_ID

 

  • 있었는데요 없었습니다 
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS AS I JOIN ANIMAL_OUTS AS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID AND O.DATETIME <= I.DATETIME 
ORDER BY I.DATETIME

 

  • 오랜 기간 보호한 동물(1) 
SELECT A.NAME, A.DATETIME 
FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID 
WHERE B.ANIMAL_ID IS NULL 
ORDER BY A.DATETIME
LIMIT 3

 

  • 보호소에서 중성화한 동물
SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM ANIMAL_INS as I JOIN ANIMAL_OUTS as O
WHERE I.ANIMAL_ID = O.ANIMAL_ID AND I.SEX_UPON_INTAKE != O.SEX_UPON_OUTCOME
ORDER BY O.ANIMAL_ID

 

 

String, Date

  • 루시와 엘라 찾기
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID

 

  • 이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS 
WHERE ANIMAL_TYPE = "Dog" AND NAME LIKE "%EL%"
ORDER BY NAME ASC

 

  • 중성화 여부 파악하기 
SELECT ANIMAL_ID, NAME, 
IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%', 'O', 'X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC

 

  • 오랜 기간 보호한 동물(2)
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS as I JOIN ANIMAL_OUTS as O
WHERE I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC
LIMIT 2

 

  • DATETIME에서 DATE로 형 변환
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID