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