• [프로그래머스] 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

    댓글

Designed by Tistory.