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

    LHS's Study Space

    RSS·Powered by Inblog