티스토리 뷰
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로 그룹되어서 결과가 나타나게 됩니다
'[개발]프로그래밍 > sql' 카테고리의 다른 글
[oracle] ROLLUP,CUBE - GROUP BY에 사용되는 합계 정보 (0) | 2016.10.10 |
---|---|
[oracle] HAVING 절 - GROUP BY에서 사용되는 집계함수 조건 (2) | 2016.10.10 |
[oracle] MIN , MAX - 최소값과 최대값 (0) | 2016.10.06 |
[oracle] COUNT , SUM - 개수와 합계 (0) | 2016.10.06 |
[oracle] DISTINCT - 중복된 내용 제거 (0) | 2016.10.04 |
- Total
- Today
- Yesterday