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