본문 바로가기

SQL

SQL, Oracle로 Group By 일별, 주별, 월별, 년도별

매출 그래프를 구현하기 위해서 일별, 주별, 월별, 년도별로 매출정보를 가져와야 하는 상황이다. 

1. 일별 매출 

CREATE VIEW DAILYSALES
AS(
    SELECT P.P_PRICE, S.S_QTY,S_DATE
    FROM PRODUCT P INNER JOIN SALES S
    ON P.P_CODE = S.P_CODE
    WHERE S_DATE  >= TO_CHAR(SYSDATE-7,'YYYY-MM-DD')
);


 SELECT S_DATE AS 날짜, SUM(S_QTY*P_PRICE) AS 일일매출
 FROM DAILYSALES
 GROUP BY S_DATE
 ORDER BY S_DATE;

1.1 view 만들기

  - 일단 상품 테이블의 가격, 매출 테이블의 판매수량, 매출테이블의 판매일을 보여주는 view를 만들었다. 

  - 그리고 조건절로  WHERE S_DATE  >= TO_CHAR(SYSDATE-7,'YYYY-MM-DD') 를 사용하여 최근 일주일의 정보를 가져올 수 있게 구현하였다. 

1.2 만든 view를 판매일로 group by 하기 

 - 일별 매출을 보고 싶은 것이니 판매일(S_DATE)컬럼을 group by 하면 된다.

 

2. 주간 매출

CREATE VIEW WEEKLYSALES
AS(
    SELECT P.P_PRICE, S.S_QTY,S_DATE
    FROM PRODUCT P INNER JOIN SALES S
    ON P.P_CODE = S.P_CODE
    WHERE S_DATE  >= to_char(add_months(sysdate,-1),'yyyy-mm-dd')--최근 한달
);

SELECT TO_CHAR(S_DATE, 'W')AS 주차 , SUM(S_QTY*P_PRICE) AS 주간 매출
FROM  WEEKLYSALES
GROUP BY TO_CHAR(S_DATE, 'W')
ORDER BY TO_CHAR(S_DATE, 'W');

2.1 view 만들기

  - 일별매출과 같은 컬럼을 가져왔다.

  - 조건절로는 최근 한달의 정보를 가져올 수 있게 where 절을 걸었다. 

2.2 만든 view를 판매일로 group by 하기 

 - 일주일 단위로 group by 해준다.

 

3. 월별 매출

CREATE VIEW MONTHLYSALES
AS(
    SELECT P.P_PRICE, S.S_QTY,S_DATE
    FROM PRODUCT P INNER JOIN SALES S
    ON P.P_CODE = S.P_CODE
    WHERE S_DATE  >= to_char(add_months(sysdate,-12),'yyyy-mm-dd')--최근 일년 
); 

SELECT TO_CHAR(S_DATE, 'YYYYMM')AS 월 , SUM(S_QTY*P_PRICE) AS 월별매출
FROM   MONTHLYSALES
GROUP BY TO_CHAR(S_DATE, 'YYYYMM')
ORDER BY TO_CHAR(S_DATE, 'YYYYMM');

3.1 view 만들기

  - 일별매출과 같은 컬럼을 가져왔다.

  - 조건절로는 최근 1년의 정보를 가져올 수 있게 where 절을 걸었다. 

3.2 만든 view를 판매일로 group by 하기 

 - 한달 단위로 group by 해준다.

 

4. 최근 10년 매출 

CREATE VIEW     ANNUALSALES
AS(
    SELECT P.P_PRICE, S.S_QTY,S_DATE
    FROM PRODUCT P INNER JOIN SALES S
    ON P.P_CODE = S.P_CODE
     WHERE S_DATE  >= to_char(add_months(sysdate,-120),'yyyy-mm-dd')--최근 십년
); 

SELECT to_char(S_DATE, 'YYYY')AS 년도 , SUM(S_QTY*P_PRICE) AS 연매출
FROM   ANNUALSALES
GROUP BY to_char(S_DATE, 'YYYY')
ORDER BY to_char(S_DATE, 'YYYY');

4.1 view 만들기

  - 일별매출과 같은 컬럼을 가져왔다.

  - 조건절로는 최근 10년의 정보를 가져올 수 있게 where 절을 걸었다. 12(1년)*10 = 120, SYSDATE(오늘)에서 총 120개월을 빼면 최근 10년 정보를 가져올 수 있다. 

3.2 만든 view를 판매일로 group by 하기 

 - 일년 단위로 group by 해준다.