Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 데브코스
- 데이터 웨어하우스
- sql
- 가상환경
- 데이터엔지니어링
- PYTHON
- linux
- Django
- redshift
- 데이터 파이프라인
- 운영체제
- Go
- TIL
- 자료구조
- 컴퓨터네트워크
- 컴퓨터 네트워크
- airflow.cfg
- airflow
- Docker
- http
- HADOOP
- 데이터 엔지니어링
- S3
- 종류
- 파이썬
- 데이터베이스
- AWS
- TCP
- dockerfile
- 정리
Archives
- Today
- Total
홍카나의 공부방
[SQL] MySQL : 연월일 중 월을 표현하고 싶을 때 (DATE_FORMAT) 본문
CREATE TABLE IF NOT EXISTS order_summary_daily (
order_date date,
order_country varchar(16),
total_revenue numeric,
order_count int
);
위와 같은 쿼리로 테이블을 하나 만들었다고 가정하자.
그리고 특정 월에 특정 국가에서 발생한 주문으로 발생한 수익을 확인하고 싶다고 할 때,
-- 특정 월에 특정 국가에서 발생한 주문으로 발생한 수익은 얼마인가?
SELECT
date_format(order_date, '%m') as order_month,
-- MID(order_date, 6, 2) as order_month,
order_country,
SUM(total_revenue) as order_revenue
FROM order_summary_daily
GROUP BY
order_month,
order_country
ORDER BY order_month, order_country;
SELECT에서 크게 두 가지 방법을 사용할 수 있다.
1) DATE_FORMAT을 이용한다. DATE_FORMAT( 대상 컬럼, 원하는 포맷 )을 사용하면 된다. 만약 연-월로 표현하고 싶으면 DATE_FORMAT(order_date, '%Y-%m')을 사용하면 된다.
2) MID를 이용해서 해당 컬럼의 레코드에 담긴 date 값을 파싱 한다. date는 '2023-05-28' 이런 형식으로 담겨있는데,
MID(대상 컬럼, 시작 위치, 글자수) 양식에 맞게 사용하면, 글자수만큼 문자열을 반환해 준다.
LEFT로 연-월 형식을 파싱 할 수도 있는데 그건 사용자 목적에 따라 알아서 하면 된다.
코드의 가독성을 위해서는 DATE_FORMAT이 약간 더 권장되는 방식이라고 생각한다.
나 혼자 봐서는 스키마에 대한 이해가 되서 바로바로 의미를 파악할 수 있지만, 다른 사람이 DATE_FORMAT과 MID를 마주쳤을 때 빠르게 그 의미를 해석할 수 있는 것은 전자라고 생각한다.
그리고 월의 표시 형식을 '06', '07' 이런게 아니라 'June', 'July'로 표현할 수 있는 확장성이 큰 방법도 DATE_FORMAT 내장함수를 이용하는 방법이기도 하다.
반응형
'Data Engineering > Database' 카테고리의 다른 글
SELECT 문의 실행 순서 (0) | 2023.06.12 |
---|---|
SQL 연습 - 프로그래머스 SQL 문제풀이 (1) (0) | 2023.06.12 |
[데이터베이스] 정규화, 함수 종속 관계, 정규형 (0) | 2023.05.27 |
[데이터베이스] 트랜잭션 - 장애와 회복, 로그 회복 기법 (0) | 2023.05.26 |
[데이터베이스] 트랜잭션 - ACID, 연산, State (0) | 2023.05.25 |