inblog logo
|
LHS's Study Space
    SQL문제풀기

    [SQL 문제 풀기] 진료과별 총 예약 횟수 출력하기(132202)

    lhs's avatar
    lhs
    Dec 05, 2024
    [SQL 문제 풀기] 진료과별 총 예약 횟수 출력하기(132202)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리4. 다른 아이디어
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/132202
     

    1. 문제 풀이 아이디어

    • WHERE 절에서 비교 연산을 사용하고, GROUP BY 절로 데이터를 그룹화한 뒤 COUNT 함수를 활용하여 문제를 해결할 수 있다.

    2. 나의 정답 코드

    SELECT mcdp_cd as `진료과코드`, count(*) as `5월예약건수` FROM appointment WHERE apnt_ymd BETWEEN '2022-05-01' AND '2022-05-31' GROUP BY mcdp_cd ORDER BY `5월예약건수`, `진료과코드`;

    3. 정리

    • WHERE 절에서 BETWEEN 키워드를 사용해 5월에 해당하는 데이터를 필터링한다.
    • GROUP BY 절로 mcdp_cd를 기준으로 데이터를 그룹화하고, COUNT 함수를 사용해 각 그룹의 예약 건수를 계산한다.
    • ORDER BY 절을 통해 5월예약건수와 진료과코드를 기준으로 오름차순 정렬한다.

    4. 다른 아이디어

    apnt_ymd LIKE '2022-05%' left(apnt_ymd, 7) = '2022-05' year(apnt_ymd) = 2022 AND month(apnt_ymd) = 5 apnt_ymd BETWEEN '2022-05-01' AND '2022-05-31' '2022-05-01' <= apnt_ymd AND apnt_ymd < '2022-06-01'

    1. LIKE와 LEFT를 사용한 문자열 필터링

    • 장점
      • 간결하고 직관적.
      • 문자열 데이터나 DATETIME 타입 모두에 사용 가능.
    • 단점
      • LIKE와 LEFT는 데이터베이스에서 DATETIME의 인덱스를 사용할 수 없음.
      • DATETIME 타입의 데이터를 문자열로 변환하여 비교하므로, 연산 비용이 증가.

    2. YEAR와 MONTH를 사용해 연도와 월을 추출

    • 장점
      • 의도가 명확하여 쿼리의 가독성이 높음.
      • 특정 연도와 월을 정확히 비교할 때 유용.
    • 단점
      • YEAR와 MONTH는 함수 호출이므로, 데이터베이스는 인덱스를 사용할 수 없음.
      • 데이터의 양이 많을 경우 성능 저하 발생.

    3. 범위 비교 연산 (BETWEEN 또는 범위 조건 <=, < 사용)

    • 장점
      • 범위 조건(BETWEEN이나 <=, <)은 데이터베이스에서 인덱스를 효율적으로 사용 가능.
      • 범위 검색은 함수 호출이나 변환 없이 DATETIME 타입 데이터를 직접 비교하므로 가장 효율적.
      • 데이터 타입(DATETIME)을 유지하여 연산 오버헤드 없이 필터링.

    4. 결론

    • DATETIME 타입의 데이터를 필터링할 때는 가장 효율적인 방법으로 범위 비교 연산을 사용하는 것이 적합하다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리4. 다른 아이디어

    LHS's Study Space

    RSS·Powered by Inblog