Date:     Updated:

카테고리:

태그: , , ,


💡 프로그래머스 스쿨에서 제공하는 MySQL 코딩 테스트 문제들을 풀고 정리했다.


Lv1. 조건에 맞는 도서 리스트 출력하기

❓ 문제 설명

📝 나의 답

SELECT 
  BOOK_ID, 
  DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS DATE_FORMAT
FROM BOOK
WHERE CATEGORY = "인문" AND YEAR(PUBLISHED_DATE)="2021"
ORDER BY PUBLISHED_DATE

💡 풀이 팁

문제 하단 주의사항에 보면 데이트 포맷이 예시와 동일해야 한다. 이 점을 간과해서 문제를 틀리기가 쉬울 것 같다. 데이트 포맷을 지정해주는 함수는 DATE_FORMAT()이다. 아래는 포맷 형식이다. 또한 예시처럼 컬럼명도 AS로 맞춰줘야 한다.

형식 설명
%Y 년도 4자리
%y 년도 2자리
%M 월 영문
%m 월 숫자
%D 일 영문(1st, 2nd, 3rd…)
%d, %e 일 숫자 (01 ~ 31)
%T hh:mm:ss
%r hh:mm:ss AM/PM
%H, %k 시 (~23)
%h, %l 시 (~12)
%i
%S, %s
%p AM/PM


Lv1. 조건에 맞는 회원수 구하기

❓ 문제 설명

📝 나의 답

SELECT COUNT(*)
FROM USER_INFO
WHERE 
    YEAR(JOINED) = '2021' AND
    AGE BETWEEN 20 AND 29

💡 풀이 팁

이상 이하를 나타낼 때 BETWEEN 함수를 써줄 수 있다. 간단한 문제였지만, COUNT 안에 들어가는 인자의 중요성을 재고할 수 있는 문제이다.

  • COUNT(*): 모든 행을 출력
  • COUNT(COLUMN): 특정 COLUMN의 NOT NULL인 행만 출력
  • COUNT(DISTINCT COLUMN): 특정 COLUMN의 중복을 제거하고 NOT NULL인 행만 출력

위 경우는 WHERE절에서 AGE의 범위를 조건으로 걸어주어서 자연스레 NULL값들이 빠졌지만, 그 부분이 빠졌더라면 COUNT(*)을 할 때와 COUNT(AGE)를 할 때의 결과가 다르게 나타났을 것이다.


Lv1. 나이 정보가 없는 회원 수 구하기

❓ 문제 설명

📝 나의 답

SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE AGE IS NULL

💡 풀이 팁

앞선 문제에서 나왔던 원리를 차용하면 아래와 같은 답도 가능하다.

  • COUNT(*): 모든 행을 출력
  • COUNT(COLUMN): 특정 COLUMN의 NOT NULL인 행만 출력
  • COUNT(DISTINCT COLUMN): 특정 COLUMN의 중복을 제거하고 NOT NULL인 행만 출력
SELECT (COUNT(*) - COUNT(AGE)) AS USERS
FROM USER_INFO