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
반응형
'Digital Boot > Database' 카테고리의 다른 글
[Database][SQL] 데이터 조회 문제 만들어보기 (2) | 2023.11.23 |
---|---|
[Database][SQL] Join 조인 / Inline View 가상 테이블 (0) | 2023.11.23 |
[Database][SQL] 함수(replace, round, cast) / 조건문 / NULL (2) | 2023.11.22 |
[Database][SQL] SubQuery 서브쿼리 (4) | 2023.11.21 |
[Database][SQL] 별칭 / 연산자 / 함수 (0) | 2023.11.21 |