티스토리 뷰

1. GROUP BY - 역할

특정 범위 내에서 집계 함수를 활용하여 데이터를 추출하고자 할 때 사용


2. GROUP BY - 기본 테이블

 TEST_TABLE_ONE


NAME

AMT

DEPT 

테스트1

1000 

test_d1

테스트2

1000 

test_d1

테스트3

3000 

 

테스트4

2000 

test_d2

테스트5

2000 

test_d2


3. GROUP BY- SQL 문장1

 SQL


1
SELECT DEPT FROM TEST_TABLE_ONE GROUP BY DEPT



1
SELECT DISTINCT DEPT FROM TEST_TABLE_ONE



 결과 테이블


 DEPT

 test_d2

 test_d1




◈ 설명


단순히 GROUP BY를 사용했을 경우 결과는 DISTINCT 를 것과 같은 결과가 보입니다


그렇지만 결과는 같지만 DISTINCT 는 중복된 값을 제거한 것이고 , GROUP BY는 같은 것끼리 그룹을 지은 것입니다


4. GROUP BY- SQL 문장2

 SQL


1
2
3
4
5
SELECT DEPT 
           ,SUM(AMT) AS S_AMT
           ,MAX(AMT) AS MX_AMT 
               FROM TEST_TABLE_ONE
                      GROUP BY DEPT





 결과 테이블


 DEPT

 S_AMT  

MX_AMT 

 3000  

3000 

 test_d2

4000 

2000 

 test_d1

2000 

1000 




◈ 설명


S_AMT 는 부서별로 합계값을 나타낸 것입니다


MX_AMT는 부서별로 최대 AMT 값을 반환한 것입니다


5. GROUP BY- SQL 문장3

 SQL


1
2
3
4
5
6
SELECT DEPT 
           ,SUM(AMT) AS S_AMT
           ,MAX(AMT) AS MX_AMT
,NAME
               FROM TEST_TABLE_ONE
                      GROUP BY DEPT




 결과


ORA-00979 : not a GROUP BY expression




◈ 설명


NAME가 집계함수가 아니거나 GROUP BY 절에 없기 때문에 에러가 발생합니다





6. GROUP BY- SQL 문장4

 SQL


1
2
3
4
5
6
SELECT DEPT 
           ,SUM(AMT) AS S_AMT
           ,MAX(AMT) AS MX_AMT 
,NAME
               FROM TEST_TABLE_ONE
                      GROUP BY DEPT,NAME




 결과 테이블


 DEPT

 S_AMT  

MX_AMT  

 NAME 

test_d1

1000 

1000 

테스트1 

test_d2

2000 

2000 

테스트4 

test_d1

1000 

1000 

테스트2

 test_d2

2000 

2000 

테스트3

 

3000 

3000 

테스5




◈ 설명


그룹핑을 부서와 이름으로 하게 되면 부서는 그룹핑으로 묶을 수 있지만 이름 같은 경우에는 다 다르기 때문에 

각각 그룹핑을 하게 되어 위와 같은 결과가 나오게 됩니다


만약 NAME을 그룹핑하지 않고 MAX, MIN 과 같은 함수를 쓰게 된다면 DEPT로 그룹되어서 결과가 나타나게 됩니다


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday