메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
 
(사용자 2명의 중간 판 36개는 보이지 않습니다)
3번째 줄: 3번째 줄:
= Welcome To DB STUDY =
= Welcome To DB STUDY =
<p sizes="(max-width: 600px) 480px,800px">
<p sizes="(max-width: 600px) 480px,800px">
https://dbstudy.co.kr/w/images/dbstudy_main.png
https://dbstudy.co.kr/w/images/dbstudy_logo.jpg
</p>
</p>
== ORACLE ==
= ORACLE =
= [[ORACLE SQL 30일 학습|오라클 SQL 30일 학습]]=
== [[SQL 기본]] ==
=== [[데이터 베이스 용어 설명]] ===
=== [[SELECT 구문]] ===
==== [[GROUP BY 절]] ====


물론이죠! Oracle의 GROUP BY 절에 대해 초보자도 이해하기 쉽게 설명해드릴게요.
== [[ORACLE SQL 30일 학습|오라클 SQL 30일 학습]]==
# [[SQL 기본|'''SQL 기본''']]
## [[데이터 베이스 용어 설명]]
## [[테이블 컬럼 데이터 유형|데이터 유형]]
## [[SELECT 구문|SELECT 기본 구문 작성 순서]]
### [[GROUP BY 절]]
### [[WITH 절]]
### [[SQL 조인]]
## [[INSERT 구문]]
## [[UPDATE 구문]]
## [[DELETE 구문]]
## [[MERGE 구문]]
## [[ALTER TABLE 구문]]
## [[DROP TABLE 구문]]
## [[TRUNCATE TABLE 구문]]
#[[SQL 활용|'''SQL 활용''']]
## [[오라클SQL 과 안시SQL]]
## [[SQL 실행원리 와 과정 ]]
## [[최적의 SQL 작성법]]
## [[스칼라 인라인뷰 서브쿼리|서브쿼리(스칼라/인라인뷰/서브쿼리)]]
## [[오라클 내부함수]]
## [[원도우 함수|윈도우 함수(분석 함수)]]
## [[집계함수 (aggregate function)]]
## [[그룹 함수]]
## [[인덱스]]
## [[CONNECT BY 절]]
## [[LATERAL]]
# [[PL/SQL 기초|'''PL/SQL 기초''']]
## [[함수]]
## [[프로시져]]
## [[패키지]]
## [[트리거]]
# [[SQL 고급|'''SQL 고급''']]
## [[정규표현식(regular expression)]]
## [[전체 텍스트 검색 match]]
## [[테이블 샘플링 (Table Sampling)]]
## [[임시 테이블 (Temporary Tables)]]
## [[동적 SQL (Dynamic SQL)]]


----
 
1. GROUP BY 절이란?
• 뜻 (영문): GROUP BY is used to group rows that have the same values in specified columns into summary rows.
• 뜻 (한글): GROUP BY는 특정 컬럼 값을 기준으로 같은 값들끼리 묶어서 결과를 보여주는 SQL 절입니다.
 
 
2. 특징
• 집계 함수(예: COUNT(), SUM(), AVG(), MAX(), MIN())와 함께 자주 사용됩니다.
• 데이터를 그룹별 요약하거나 분류해서 볼 수 있습니다.
 
 
3. 사용 방법
 
SELECT 컬럼명, 집계함수
FROM 테이블명
GROUP BY 컬럼명;
 
 
 
 
4. 예제
 
예제 테이블: employees
 
emp_id name department salary
1 John Sales 3000
2 Alice Sales 3200
3 Bob IT 4000
4 Carol IT 4200
5 David HR 2800
 
예제 1: 부서별 평균 급여 구하기
 
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
 
결과
 
department avg_salary
Sales 3100
IT 4100
HR 2800
 
설명: department(부서)별로 묶어서, 각 부서의 salary(급여) 평균을 구한 것입니다.
 
 
예제 2: 부서별 직원 수 구하기
 
SELECT department, COUNT(*) AS num_employees
FROM employees
GROUP BY department;
 
결과
 
department num_employees
Sales 2
IT 2
HR 1
 
설명: GROUP BY department를 통해 부서별로 직원 수를 센 것입니다.
 
 
5. 주의사항
• GROUP BY에 사용하지 않은 컬럼은 SELECT절에 직접 쓸 수 없습니다. (단, 집계 함수 안에 들어가는 경우는 예외)
• GROUP BY는 정렬 기능이 아닙니다. 정렬은 ORDER BY를 사용해야 합니다.
 
 
좋습니다! 이제 GROUP BY의 복잡한 예제와 함께 자주 같이 쓰이는 **고급 개념 (HAVING, 다중 컬럼 그룹화 등)**도 설명해드릴게요.
 
 
1. HAVING 절
 
개념
• HAVING은 GROUP BY로 그룹화한 결과에 조건을 거는 절입니다.
• WHERE는 그룹화 전에 조건, HAVING은 그룹화 후 조건입니다.
 
 
예제 테이블: sales
 
id product region amount
1 Laptop Seoul 2000
2 Laptop Busan 1500
3 Phone Seoul 1000
4 Phone Busan 1200
5 Laptop Seoul 2200
6 Phone Seoul 1300
 
 
 
 
예제 1: 지역별로 제품 판매 총합이 3000 이상인 경우만 보기
 
SELECT region, SUM(amount) AS total_sales
FROM sales
GROUP BY region
HAVING SUM(amount) >= 3000;
 
결과
 
region total_sales
Seoul 5500
 
설명: GROUP BY region으로 지역별로 묶고, HAVING을 통해 총합이 3000 이상인 지역만 필터링합니다.
 
 
2. 다중 컬럼 GROUP BY
 
개념
• 두 개 이상의 컬럼을 기준으로 복합적으로 그룹화할 수 있습니다.
 
 
예제 2: 지역 + 제품별 판매 총액 구하기
 
SELECT region, product, SUM(amount) AS total_sales
FROM sales
GROUP BY region, product;
 
결과
 
region product total_sales
Seoul Laptop 4200
Seoul Phone 2300
Busan Laptop 1500
Busan Phone 1200
 
설명: region과 product를 동시에 그룹화하여, 각 지역-제품 조합별로 총 판매량을 계산했습니다.
 
 
3. GROUP BY + JOIN 활용
 
복잡한 데이터 분석에는 JOIN과 GROUP BY를 함께 사용합니다.
 
 
예제 테이블
 
employees
 
emp_id name dept_id
1 John 10
2 Alice 10
3 Bob 20
 
departments
 
dept_id dept_name
10 Sales
20 IT
 
salaries
 
emp_id salary
1 3000
2 3500
3 4000
 
 
 
 
예제 3: 부서별 평균 급여 구하기 (JOIN 사용)
 
SELECT d.dept_name, AVG(s.salary) AS avg_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
JOIN salaries s ON e.emp_id = s.emp_id
GROUP BY d.dept_name;
 
결과
 
dept_name avg_salary
Sales 3250
IT 4000
 
설명: 여러 테이블을 JOIN해서 dept_name 기준으로 묶고 평균 급여를 계산했습니다.
 
 
4. ROLLUP (고급)
 
ROLLUP은 그룹별 합계 외에 **전체 합계(총계)**까지 같이 보여줍니다.
 
 
예제 4: 제품별 판매 총액과 전체 총액까지 보여주기
 
SELECT product, SUM(amount) AS total_sales
FROM sales
GROUP BY ROLLUP(product);
 
결과
 
product total_sales
Laptop 3700
Phone 3500
NULL 7200
 
설명: NULL은 전체 총합을 의미합니다. 제품별 합계 + 전체 합계를 한 번에 볼 수 있습니다.
 
 
요약
 
개념 설명
GROUP BY 특정 컬럼으로 그룹화
HAVING 그룹화된 결과에 조건을 거는 절
다중 그룹화 두 개 이상 컬럼으로 그룹화
JOIN + GROUP BY 여러 테이블 연결 후 그룹화
ROLLUP 그룹별 합계 + 전체 합계까지 한 번에 출력
 
 
 
 
 
[[category:oracle]]
 
==== [[WITH 절]] ====
==== [[SQL 조인]] ====
=== [[INSERT 구문]] ===
=== [[UPDATE 구문]] ===
=== [[MERGE 구문]] ===
 
== [[SQL 활용]] ==
=== [[오라클SQL 과 안시SQL]] ===
=== [[SQL 실행원리 와 과정 ]]===
=== [[최적의 SQL 작성법]] ===
=== [[스칼라 인라인뷰 서브쿼리|서브쿼리(스칼라/인라인뷰/서브쿼리)]]===
 
=== [[원도우 함수]]===
=== [[집계함수 (aggregate function)]]===
 
=== [[그룹 함수]]===
=== [[인덱스]] ===
=== [[CONNECT BY 절]] ===
=== [[LATERAL]] ===
== [[PL/SQL 기초]] ==
=== [[함수]] ===
=== [[프로시져]] ===
=== [[패키지]] ===
=== [[트리거]] ===
== [[SQL 고급]] ==
 
=== [[ORACLE DBA 30일 학습]] ===

2025년 6월 2일 (월) 20:07 기준 최신판