SELECT [* | DISTINCT] {컬럼명, 컬럼명, ...}
FROM 테이블명
[WHERE 조건절]GROUP BY {컬럼명, ....}
[HAVING 조건] ] --GROUP BY 절에 대한 조건
[ORDER BY {컬럼명 [ASC | DESC], ....}] --ASC : 오름차순(기본/생략가능)
--DESC : 내림차순
--GROUP BY : 데이터를 그룹핑해서 처리할 경우 사용
--GROUP BY 문을 사용하면 SELECT 항목은 GROUP BY 절에 사용된 컬럼과 그룹함수 (COUNT, SUM, MAX, MIN)만 사용할 수 있다
고객명 기준으로 고객별 구입(판매) 데이터 조회(건수, 합계, 평균, 최소, 최대)
---- 추신수, 장미란 고객 2명만 조회
SELECT C.NAME, COUNT(*) COUNT, SUM(SALEPRICE) SUM,
TRUNC(AVG(SALEPRICE)) AVERAGE,
MIN(SALEPRICE) MIN, MAX(SALEPRICE) MAX
FROM ORDERS O, CUSTOMER C
WHERE O.CUSTID = C.CUSTID
AND C.NAME IN ('추신수', '장미란')
GROUP BY C.NAME
;
--================================
--(실습) 필요시 조인(JOIN)과 GROUP BY ~ HAVING 구문을 사용해서 처리
--1. 고객이 주문한 도서의 총판매건수, 판매액, 평균값, 최저가, 최고가 구하기
--2. 고객별로 주문한 도서의 총수량, 총판매액 구하기
--3. 고객의 이름과 고객이 주문한 도서의 판매가격을 검색
--4. 고객별로 주문한 모든 도서의 총 판매액을 구하고, 고객명으로 정렬
--5. 고객별로 주문한 건수, 합계금액, 평균금액을 구하고(3권 보다 적게 구입한 사람 검색)
--(번외) 고객 중 한 권도 구입 안한 사람은 누구 ?
--================================
--1. 고객이 주문한 도서의 총판매건수, 판매액, 평균값, 최저가, 최고가 구하기
SELECT COUNT(*), SUM(SALEPRICE), AVG(SALEPRICE),
MAX(SALEPRICE), MIN(SALEPRICE)
FROM CUSTOMER C, ORDERS O
WHERE C.CUSTID = O.CUSTID
;
--2. 고객별로 주문한 도서의 총수량, 총판매액 구하기
SELECT C.NAME, COUNT(*) COUNT, SUM(SALEPRICE) SUM
FROM CUSTOMER C, ORDERS O
WHERE C.CUSTID = O.CUSTID
GROUP BY C.NAME
;
--3. 고객의 이름과 고객이 주문한 도서의 판매가격을 검색
SELECT C.NAME, BOOKNAME, PRICE
FROM CUSTOMER C, BOOK B, ORDERS O
WHERE B.BOOKID = O.BOOKID AND C.CUSTID = O.CUSTID
ORDER BY NAME
;
--4. 고객별로 주문한 모든 도서의 총 판매액을 구하고, 고객명으로 정렬
SELECT C.NAME, SUM(SALEPRICE) SUM_PRICE
FROM CUSTOMER C, BOOK B, ORDERS O
WHERE B.BOOKID = O.BOOKID AND C.CUSTID = O.CUSTID
GROUP BY C.NAME
ORDER BY NAME
;
--5. 고객별로 주문한 건수, 합계금액, 평균금액을 구하고(3권 보다 적게 구입한 사람 검색)
SELECT C.NAME, COUNT(*), SUM(SALEPRICE) SUM_PRICE,
TRUNC(AVG(SALEPRICE)) AVG_PRICE
FROM CUSTOMER C, BOOK B, ORDERS O
WHERE B.BOOKID = O.BOOKID AND C.CUSTID = O.CUSTID
GROUP BY C.NAME
HAVING COUNT(*) < 3
ORDER BY NAME