[프로그래머스 MySQL] 조건에 맞는 도서 리스트 출력하기(YEAR, DATE_FORMAT), 조건에 맞는 회원수 구하기, 나이 정보가 없는 회원 수 구하기
카테고리: Programmers-MySQL
태그: COUNT, DATE_FORMAT, IS NULL, MySQL
💡 프로그래머스 스쿨에서 제공하는 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