데이터베이스
[프로그래머스] SQL Lv.1 요약
mygumi
2023. 5. 13. 20:20
반응형
이 글은 프로그래머스 코딩테스트 문제중 "SQL, Lv.1" 에 대한 내용이다.
문제에 대한 풀이가 아닌 팁들을 남기려고한다. (풀이는 아래 깃헙 링크를 참고)
문제 리스트 - https://school.programmers.co.kr/learn/challenges?order=recent&levels=1&page=1&languages=mysql
풀이 코드 - https://github.com/hotehrud/acmicpc/tree/master/programmers/Lv.1
프로그래머스에서 제공하는 Lv.1 에 해당하는 SQL 문제를 풀어보았다. (MYSQL 기준)
쉬운 문제이더라도, 다른 사람의 풀이를 보면서 많은 팁들을 보게 된다.
그러한 내용들을 정리해보고자한다.
어떤 방식이 더 좋고 나쁘고를 말하고자 하는 것이 아니라는 것을 참고해주길 바란다.
년,월,일 각각의 기준으로 검색하기
SELECT
BRITH_DATE
FROM USER
WHERE YEAR(BRITH_DATE) = '2021'
// WHERE MONTH(BRITH_DATE) = '12'
// WHERE DAY(BRITH_DATE) = '1'
NULL 유무에 따라 출력값 변경하기
SELECT
CASE
WHEN AGE is not null
THEN AGE
ELSE 'NONE'
END
FROM USER
SELECT
COALESCE(AGE, 'NONE')
FROM USER
SELECT
IFNULL(AGE, 'NONE')
FROM USER
CASE, COALESCE, IFNULL 함수를 사용할 수 있다.
3가지 방식 모두 값이 존재하면 그대로 출력하고, NULL 이라면 "NONE" 출력한다.
최대값 조회하기
SELECT
MAX(AGE) as MAX_AGE
FROM USER
COUNT 함수 응용
SELECT COUNT(*) as USERS
FROM USER
WHERE AGE IS null
SELECT COUNT(*) - COUNT(AGE) as USERS
FROM USER
SELECT COUNT(IF(AGE IS NULL, USER_ID, NULL)) USERS
FROM USER;
AGE 가 존재하는 데이터 개수를 위와 같은 방식으로 조회할 수 있다.
날짜 구조 변환
SELECT
DATE_FORMAT(START_DATE, '%Y-%m-%d') as START_DATE,
DATE_FORMAT(END_DATE, '%Y-%m-%d') as END_DATE
FROM RENTAL_HISTORY
SELECT
LEFT(START_DATE, 10) as START_DATE,
LEFT(END_DATE, 10) as END_DATE
FROM RENTAL_HISTORY
DATE_FORMAT 을 활용할 수도 있고, LEFT 를 통해 문자열을 자를 수도 있다. ex) 2022-09-02 00:00:00
날짜 차이 구하기
SELECT
CASE WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30
THEN '장기 대여'
ELSE '단기 대여'
END
FROM RENTAL_HISTORY
2개의 날짜의 차이가 30일 이상이면 장기 대여, 그렇지 않으면 단기 대여로 출력할 수 있다.
날짜 범위 조회
SELECT
END_DATE
FROM RENTAL_HISTORY
WHERE END_DATE BETWEEN '2022-10-01' AND '2022-10-31'
평균값 구한 후, 소수점 반올림하기
SELECT
ROUND(AVG(DELAY_FEE))
FROM RENTAL_HISTORY
반응형