-
[프로그래머스] SQL Lv.1 요약데이터베이스 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
반응형'데이터베이스' 카테고리의 다른 글
MYSQL 사용자 관리 :: 마이구미 (0) 2016.12.21 MySQL 백업 및 복구 (덤프):: 마이구미 (0) 2016.12.12