https://school.programmers.co.kr/learn/courses/30/lessons/144855
SELECT b.category, sum(s.sales) as total_sales
from book b
join book_sales s
on b.book_id = s.book_id
where s.sales_date like '2022-01%'
group by b.category
order by b.category
목적
- 2022년 1월 동안의 책 판매 데이터를 기반으로 카테고리별 총 판매액을 계산
- 카페고리별 정렬하여 결과 반환
FROM절
- book b : 책 정보를 담고 있는 테이블, 별칭 b 사용하여 간결하게 함
- join book_sales s on b.book_id = s.book_id : book_sales 테이블과 book 테이블을 book_id로 조인
WHERE절
- s.sales_date like '2022-01%' : 2022년 1월의 판매 데이터를 필터링함
- like 연산자를 사용하여 2022-01로 시작하는 데이터를 필터링 할 수 있다.
GROUP BY절
- b.category : 카테고리별로 그룹화하여 판매액 계산
ORDER BY절
- b.category : 결과를 카테고리별로 오름차순 정렬 (asc 생략)
💡알게된 것
날짜 필터링 최적화
where s.sales_date between '2022-01-01' and '2022-01-31'
내가 했던 like '2022-01%' 보다 성능개선에 중요한 이유는 ..?
1. 인덱스 활용
like 은 문자열로 검색하기 때문에 인덱스를 사용할 때도 전체 데이터에서 문자열을 비교해야 할 수 있다. 이로 인해 성능이 떨어질 수 있다.
반면, between, and, >= , <= 범위 검색은 날짜 컬럼이 인덱스되어 있는 경우, 효율적으로 활용할 수 있다. 인덱스는 날짜 범위에 대해 빠르게 검색할 수 있어 성능 개선된다. (인덱스가 적용된 컬럼에 효율적 !)
'Backend > DataBase' 카테고리의 다른 글
[MySQL] SQL 코딩테스트 코드리뷰 (0) | 2024.08.13 |
---|---|
[MySQL] SQL 코딩테스트 코드리뷰 (0) | 2024.08.13 |
[DataBase] ERD 다이어그램 / 슈퍼타입 , 서브타입 (1) | 2023.12.02 |