14주차 수 1122(데이터분석, 그룹함수 와 집합함수) :: newb

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 14주차 수 1122(데이터분석, 그룹함수 와 집합함수)
    광주인력개발원 일일포스팅(메모장) 2023. 11. 22. 18:43
    728x90
    반응형
    -- 그룹함수 또는 집합함수 ...
    -- 표준...
    /*
     - count() : 행의 갯수 (컬럼명을 사용하는 경우 null은 제외)
     - avg() : 평균  ( null인 경우 처리 필요 )
     - max() : 최대값( null인 경우 처리 필요 )
     - min() : 최소값( null인 경우 처리 필요 )
     - sum() : 합계  ( null인 경우 처리 필요 )
    */
    
    SELECT COUNT(*) AS all_cnt,
    		AVG(mem_mileage) AS all_avg,
    		SUM(mem_mileage) AS all_sum,
    		MAX(mem_mileage) AS mileage_max,
    		MIN(mem_mileage) AS mileage_min
    FROM MEMBER; 
    
    -- null이 존재하는 컬럼의 경우에는
    -- : null 체크를 해야함
    -- : not null 조건인 컬름은 제외해도 무관
    SELECT COUNT(nvl(prod_mileage, 0)) AS all_cnt,
    		COUNT(*) AS all_cnt2,
    		AVG(nvl(prod_mileage, 0)) AS all_avg,
    		SUM(nvl(prod_mileage, 0)) AS all_sum,
    		MAX(nvl(prod_mileage, 0)) AS mileage_max,
    		MIN(nvl(prod_mileage, 0)) AS mileage_min
    FROM prod; 
    
    -- 일반 조건 ㅣ Where절 사용
    -- 그룹에 대한 조건 : Group By ~ Having 절 사용
    -- Group By절
    -- : 그룹으로 묶고자 하는 컬럼명 or 일반함수를 처리한 컬럼  지정
    -- Having절
    -- : 그룹함수를 이용한 조건(비교 연산자) 사용
    -- : 그룹 조건이 없으면 Having절은 사용 안해도 됨
    --  (Group By절만 사용 가능)
    
    -- 그룹에 대한 문제로 인식하는 방법
    -- : ~별로 조회 라는 개념적 용어가 사용되면 Group By를 사용
    
    -- 회원 취미별로 count 하기
    SELECT mem_like, count(nvl(mem_like, 0)) AS cnt_like
    FROM MEMBER
    -- 그룹화 할 컬럼 지정
    -- group by에 지정한 컬럼 or 일반함수를 이용한 경우,
    -- : select절에 예의상 넣어주기
    GROUP BY mem_like;
    
    -- 일반적으로 집계함수와 일반컬럼 or 일반함수가 적용된 경우에는
    -- Group By 절에도 존재합니다.
    SELECT mem_like, count(nvl(mem_like, 0)) AS cnt_like,
    		SUM(nvl(mem_mileage, 0)) AS sum_mile
    FROM MEMBER
    GROUP BY mem_like;
    -- [문제]
    -- 회원의 성별 count값을 조회해주세요...
    SELECT 
    		if(mod(SUBSTR(mem_regno2,1,1),2) > 0,'남자', '여자')AS mem_mf,
    		COUNT(SUBSTR(mem_regno2,1,1)) AS mem_mf_count
    FROM MEMBER
    GROUP BY SUBSTR(mem_regno2,1,1);
    
    SELECT COUNT(*) AS cnt -- 묶은값들에 대한 카운트
    FROM MEMBER
    Group BY SUBSTR(mem_regno2,1,1) -- 같은 값끼리 묶어라..
    ORDER BY cnt Desc;
    /*
    < 처리순서>
    1. Select
    2. From 테이블
    3. Where ~ And
    4. Group By
    5. Having
    6. Select 뒤에 컬럼들
    7. Order By
    
    <SQL 작성>
    Select 컬럼들
    From   테이블
    Where 일반조건
      And 일반조건
    Group By 그룹컬럼
    Having   그룹조건
    Order By 정렬컬럼
    
    <Group By를 사용한 경우 규칙>
     - Gruop By절에 제시된 컬럼들은 원형그대로, 조회할 컬럼에 제시
     - Select절 뒤에 컬럼 또는 일반함수를 이용해서 조회하고자 하는 컬럼들은
       Gruop By절에 원형 그대로 제시가 되어 있어야 오류가 안남
     - 컬럼 뒤에 별칭(as)은 group By절에는 사용하면 오류남  
     - 집계함수는 Group By절에 제시핮 ㅣㅇ낳습니다.
    */
    -- [문제]
    -- cart 테이블을 이용해서 회원별로 count 해주세요
    SELECT cart_member,
    		COUNT(*) AS MEMBER_cnt,
    		MAX(cart_qty) AS max_qty,
    		SUM(cart_qty) AS sum_qty
    FROM cart
    GROUP BY cart_member;
    
    -- 주문번호 : 앞자리 8자리는 주문했던 년월일,
    --          : 뒷자리 5자리는 주문일 기준 1씩 증가된 값..
    --           (주문이 일어나면 1씩 증가된 주문번호가 부여됨)
    SELECT cart_member,cart_no, cart_qty, cart_prod
    FROM cart
    WHERE cart_no LIKE '20050401%';
    -- [문제]
    -- 임의 회원이 2005년 4월 1일에 상품하나를 구매했다.
    -- 주문번호를 발급 >> 
    -- 신규 주문번호만 조회하자
    SELECT MAX(cart_no) + 1
    FROM cart
    WHERE cart_no LIKE '20050401%';

     

    728x90
    반응형
Designed by Tistory.