Contents
내가 작성한 쿼리
귀하는 레스토랑 주인이며 가능한 확장을 분석하고자 합니다(매일 최소 한 명의 고객이 있을 것입니다).
고객이 7일 동안 지불한 금액의 이동 평균을 계산합니다(즉, 현재 날짜 + 6일 전).
average_amount은 소수점 두 자리로 반올림해야 합니다.
visited_on이 정렬한 결과 테이블을 오름차순으로 반환합니다.
내가 작성한 쿼리
MySQL
SELECT
c1.visited_on, -- 기준 날짜 (현재 날짜)
SUM(amount) AS amount, -- 기준 날짜 포함 이전 6일간 거래 금액 합계
ROUND(SUM(amount) / 7, 2) AS average_amount -- 7일간 평균 금액 (소수점 둘째 자리까지 반올림)
FROM (
SELECT DISTINCT visited_on FROM Customer
) c1 -- 방문한 날짜만 중복 없이 뽑은 서브쿼리 (기준 날짜 목록)
JOIN Customer c2
ON DATEDIFF(c1.visited_on, c2.visited_on) BETWEEN 0 AND 6 -- c2의 방문일이 기준 날짜(c1)로부터 최대 6일 전 ~ 당일 사이인 경우
GROUP BY c1.visited_on -- 기준 날짜별로 그룹핑
HAVING COUNT(DISTINCT c2.visited_on) = 7 -- 7일 연속 데이터(당일 포함 7일)가 모두 존재하는 날짜만 결과에 포함
ORDER BY c1.visited_on; -- 날짜 오름차순 정렬
Oracle
SELECT
c1.visited_on,
SUM(amount) AS amount,
ROUND(SUM(amount) / 7, 2) AS average_amount
FROM (
SELECT DISTINCT visited_on FROM Customer
) c1
JOIN Customer c2
ON (c1.visited_on - c2.visited_on) BETWEEN 0 AND 6
GROUP BY c1.visited_on
HAVING COUNT(DISTINCT c2.visited_on) = 7
ORDER BY c1.visited_on;
차이점
구분 | MySQL | Oracle |
날짜 차이 계산 | DATEDIFF(date1, date2) 사용 | date1 - date2 로 직접 뺄셈 |
Share article