광주인력개발원 일일포스팅(메모장)

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

Jumbo96 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
반응형