728x90
반응형

🍁집계 함수

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를 사용
  • GROUP BY에 사용한 컬럼 or 일반함수는 select절에 넣어서 어떤 걸로 그룹화 해줬는지 알려주는 것이 좋다.
  • GROUP BY를 사용한 경우 규칙
    - GROUP BY절에 제시된 컬럼들은 원형 그대로, 조회 할 컬럼에 제시
    - SELECT 절 뒤에 컬럼 또는 일반함수를 이용해서 조회하고자 하는 컬럼들은 GROUP BY절에 원형 그대로 제시가 되어 있어야 오류가 안남
    - 컬럼 뒤에 별칭(AS) GROUP BY절에는 사용하면 오류남
    - 집계함수는 group by 절에 제시하지 않는다
SELECT mem_like, COUNT(NVL(mem_like, 0)) AS cnt_like
FROM member
-- 그룹화할 컬럼 지정
GROUP BY mem_like;

그룹 함수 문제

문제 1

  • 회원의 성별 count 값을 조회하기
  • 조회 컬럼 : 회원 성별, count 값
SELECT if(SUBSTRING(mem_regno2,1,1)=1,'남','여') AS mf, COUNT(mem_regno2) AS cnt
FROM member
GROUP BY SUBSTRING(mem_regno2,1,1);


문제 2

  • cart 테이블을 이용해서 회원별로 count 하기
SELECT cart_member, COUNT(*)AS cnt, MAX(cart_qty) AS MAX_qty, SUM(cart_qty) AS sum_qty
FROM cart
GROUP BY cart_member;


문제 3 - 1

  • 주문번호 : 앞자리 8자리는 주문했던 년월일, 뒷자리 4자리는 주문일 기준 1 씩 증가된 값
    (주문이 일어나면 1씩 증가된 주문번호가 부여됨)
  • 임의 회원이 2005년 4월 1일에 상품 하나를 구매했다.
  • 신규 주문번호를 발급하라
  • 조회컬럼 : 신규 주문번호
SELECT CAST(MAX(cart_no) + 1 AS CHAR) AS new_num
FROM cart
WHERE cart_no LIKE '20050401%';


문제 3 - 2

  • 오늘 날짜(년월일) 기준으로 주문번호를 발급하라
  • 기존에 값이 있을 수도 있고, 없을 수도 있다
  • 조회 컬럼 : 신규 주문번호
SELECT if(SUBSTRING(max(cart_no),1,8) = CURDATE(),
				MAX(cart_no) + 1,
				concat(DATE_FORMAT(CURDATE(),'%Y%m%d'),'00001')) AS new_num
FROM cart;

🍁SQL 처리 순서

SQL 처리 순서 SQL 작성 순서
1. SELECT 1. SELECT 컬럼들
2. FROM 테이블 2. FROM 테이블
3. WHERE ~ AND 3. WHERE 일반조건
4. GROUP BY 4. AND 일반조건
5. HAVING 5. GROUP BY 그룹컬럼
6. SELECT 뒤에 컬럼들 6. HAVING 그룹조건
7. ORDER BY 7. ORDER BY 정렬할 컬럼들
728x90
반응형

+ Recent posts