안녕하세요. 에린이 인사드립니다,,😇
요즘 에스큐엘 복습하면서 쿼리문을 이것저것 뽑아보는데,
매일 사용하는 데이터만 만지니까 좀 지루,, 하더라구요. 저는 뭐든 흥미를 빠르게 잃어버리는 능력이 있습니다,,🥱
담번엔 케글에서 다양한 데이터를 내려받아서 쿼리문 뽑아보려구요.
다양한 데이터를 활용해서 더 많은 내용을 공유하도록 할게요🔥
오늘은 날짜&시간 데이터간 차이를 반환해주는 DATEDIFF 와 TIMEDIFF 함수를 알아보겠습니다.
| DATEDIFF
날짜1과 날짜 2의 차이를 반환하는 함수입니다.
DATEDIFF(날짜1, 날짜2)
DATEDIFF 함수 예시 )
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') AS today,
'2023-03-01' AS day_before,
DATEDIFF(NOW(),'2023-03-01') AS 'DATEDIFF';
| TIMEDIFF
시간1과 시간2의 차이를 반환하는 함수입니다.
TIMEDIFF(시간1, 시간2)
TIMEDIFF 함수 예시 )
SELECT NOW() AS today_now,
'2023-03-11 13:00:00' AS today,
TIMEDIFF(NOW(),'2023-03-11 13:00:00') AS 'TIMEDIFF';
그럼 예제를 통해 DATEDIFF 함수를 어떻게 사용하는지 확인해볼게요-!
예제 1)
🙋🏻♀️ : 우리 고객의 최초 구매일자와 마지막 구매일자 간 차이 일수가 궁금해요.
- Table: Order_list
- Column: customer_id, purchased_at
SELECT customer_id,
MIN(purchased_at) AS '첫구매일자',
MAX(purchased_at) AS '최근구매일자',
DATEDIFF(MAX(purchased_at),MIN(purchased_at)) AS 'date_diff'
FROM Order_list
GROUP BY customer_id
HAVING COUNT(customer_id) >= 2 ;
MIN([컬럼명])은 최소값을 구하는 함수이다.
MAX([컬럼명])은 최대값을 구하는 함수이다.
고로, MIN([구매일자 컬럼]) = 첫구매일자, 최초구매일자를 출력,
MAX([구매일자 컬럼]) = 최근구매일자를 출력한다.
최초 구매일자와 마지막 구매일자는 2번 이상 구매한 고객들만 해당이 되므로,
HAVING 절에 customer_id가 2개 이상인 것들만 필터링하였다.
🗣 그럼 우리 고객의 최초 구매일자와 마지막 구매일자 간 차이 평균도 알려주세요!
이땐, WITH 구문을 사용.
위에 작성한 쿼리를 'paying_customer' 라는 별도의 임시 테이블로 만들고, 평균 값을 구하는 쿼리문을 아래에 추가하였다.
WITH paying_customer
AS
( SELECT customer_id,
MIN(purchased_at) AS '첫구매일자',
MAX(purchased_at) AS '최근구매일자',
DATEDIFF(MAX(purchased_at),MIN(purchased_at)) AS date_diff
FROM Order_list
GROUP BY customer_id
HAVING COUNT(customer_id) >= 2
)
SELECT ROUND(AVG(date_diff), 2) AS '최근구매-첫구매 평균'
FROM paying_customer ;
첫 구매와 마지막 구매 주기는 평균을 냈을 때 대략 15일이라는 것을 알 수 있다.
⇩ 함께 읽으면 좋은 포스팅 추천 🧚♀️
2023.03.02 - [TOOLS/My SQL] - [My SQL] DATE_FORMAT 함수 / 날짜에서 요일, 시간 값 출력하기
2023.02.22 - [TOOLS/My SQL] - [My SQL] 요일별 매출 - DAYOFWEEK 함수 / 날짜에서 요일 출력하기
'TOOLS > My SQL' 카테고리의 다른 글
[My SQL] 데이터 import 오류 (ascii codec..) 해결 방법 (0) | 2023.07.09 |
---|---|
[My SQL] DAU/WAU/MAU 활성 유저(Active User) 집계 / Stickness 지표 (1) | 2023.03.14 |
[My SQL] Window 함수 | RANK, DENSE_RANK, ROW_NUMBER / 행에 순위 부여하기 (0) | 2023.03.10 |
[My SQL] 고객 세분화(Customer Segmentation) 확인 - 인구 통계 정보 산출 쿼리문 (0) | 2023.03.06 |
[SQL개발자] SQLD 자격증 시험 독학 / 노베이스 공부 방법 총 정리! (0) | 2023.03.05 |