예제 1. 부서/사원 조회
- 부서별 평균 급여가 5000 이상인 부서 중
- 2005년 이후 입사한 사원만 조회하여
- 평균 급여가 높은 순으로 정렬
SELECT department_id AS 부서번호
, COUNT(*) AS 사원수
, ROUND(AVG(salary), 0) AS 평균급여
, MAX(hire_date) AS 최근입사일
FROM employees
-- 2005년 이후 입사한 사원만 조회
WHERE hire_date > TO_DATE('2005-01-01', 'YYYY-MM-DD')
-- 부서별 평균 급여가 5000 이상인 부서
GROUP BY department_id
HAVING AVG(salary) >= 5000
-- 평균 급여가 높은 순으로 정렬
ORDER BY 평균급여 DESC;
예제 2. 제품 판매 분석
- 2023년 분기별, 카테고리별 판매액 집계
- 총 판매액이 100만원 이상인 그룹만 표시
- 분기와 카테고리 순으로 정렬
SELECT TO_CHAR(sale_date, 'Q') AS 분기
, product_category AS 카테고리
, COUNT(*) AS 판매건수
, SUM(sale_amount) AS 총판매액
, AVG(sale_amount) AS 평균판매액
FROM sales
-- 2023년 분기별,
WHERE sale_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD')
-- 판매액 별,카테고리별 그룹
GROUP BY TO_CHAR(sale_date, 'Q'), product_category
-- 총 판매액이 100만원 이상
HAVING SUM(sale_amount) >= 1000000
ORDER BY 분기 ASC, 총판매액 DESC;
예제 3. 학생 성적 조회
- 각 학과별로 성적이 80점 이상인 학생들만 집계
- 학과 평균이 85점 이상인 그룹만 선택
- 평균 점수 순으로 정렬
SELECT
department AS 학과,
COUNT(*) AS 학생수,
ROUND(AVG(score), 1) AS 평균점수,
MAX(score) AS 최고점수,
MIN(score) AS 최저점수
FROM
students
WHERE
score >= 80
GROUP BY
department
HAVING
AVG(score) >= 85
ORDER BY
평균점수 DESC;
예제 4. 고객 구매 패턴 조회(ANSI SQL)
- VIP 고객(연간 구매액 500만원 이상) 중
- 2022년에 구매한 고객별 구매 통계
- 총 구매액 순으로 정렬
SELECT
c.customer_id AS 고객ID,
c.customer_name AS 고객명,
COUNT(o.order_id) AS 주문횟수,
SUM(o.order_amount) AS 총구매액,
MAX(o.order_date) AS 최근구매일
FROM
customers c
JOIN
orders o ON c.customer_id = o.customer_id
WHERE
o.order_date BETWEEN TO_DATE('2022-01-01', 'YYYY-MM-DD')
AND TO_DATE('2022-12-31', 'YYYY-MM-DD')
GROUP BY
c.customer_id, c.customer_name
HAVING
SUM(o.order_amount) >= 5000000
ORDER BY
총구매액 DESC;