Oracle의 그룹함수를 알아보자. 그룹함수는 데이터를
GROUP BY
하여 나타낼 수 있는 데이터를 구하는 함수이다. 집계 함수와 소계(총계) 함수로 나눌 수 있다. 소계 관련 함수로는 ROLLUP
, CUBE
, GROUPING SETS
, GROUPING
등이 있다.✅ 1. 그룹 함수
집계 함수 | COUNT , SUM , AVG , MAX , MIN 등 |
소계(총계) 함수 | ROLLUP , CUBE , GROUPING SETS 등
- ROLLUP 함수는 인수의 순서에 따라 결과가 달라지지만, CUBE 나 GROUPING SETS 함수는 인수의 순서가 바뀌어도 같은 결과를 출력한다. |
✅ 2. 집계 함수
데이터를 그룹화하면, 그룹화된 각 그룹을 집계하는 여러 함수를 사용할 수 있다.
함수 | 의미 |
COUNT(*) | 전체 행의 개수를 반환 |
COUNT(col) | col 값이 NULL이 아닌 개수를 반환 |
COUNT(DISTINCT col) | col 값이 NULL이 아닌 데이터 중, 중복을 제거한 개수를 반환 |
SUM(col) | NULL이 아닌 col의 총합을 반환 |
AVG(col) | NULL이 아닌 col의 평균을 반환 |
MIN(col) | NULL이 아닌 col의 최솟값을 반환 |
MAX(col) | NULL이 아닌 col의 최댓값을 반환 |
✅ 3. ROLLUP
소그룹 간 소계 및 총계를 계산하는 함수이다. 그룹 별로 함수를 계산한 값과, 총 그룹들에 함수를 계산한 값을 모두 출력해준다.
ROLLUP(A) | - A로 그룹화
- 총합계 |
ROLLUP(A, B) | - A, B로 그룹화
- A로 그룹화
- 총합계 |
ROLLUP(A, B, C) | - A, B, C로 그룹화
- A, B로 그룹화
- A로 그룹화
- 총합계 |
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fe1a18480-88a4-46db-aa53-3a07d94ec86c%252F1f4d5781-4d48-450c-8de1-c0c84b33fd76%252FUntitled.png%3Ftable%3Dblock%26id%3Ddbc7a8e3-1d60-4442-8d82-f4a1711f31af%26cache%3Dv2&w=3840&q=75&dpl=dpl_9Fy5DR7iXit8HvYKCDvmsFiYTXKA)
그룹화할 컬럼이 1개일 때
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fe1a18480-88a4-46db-aa53-3a07d94ec86c%252F8615d4cc-11c4-4fda-a929-6471b0b16dcb%252FUntitled.png%3Ftable%3Dblock%26id%3D7819784d-6862-45f1-8f2d-092cb0d75133%26cache%3Dv2&w=3840&q=75&dpl=dpl_9Fy5DR7iXit8HvYKCDvmsFiYTXKA)
그룹화할 컬럼이 2개일 때
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fe1a18480-88a4-46db-aa53-3a07d94ec86c%252Ff0b2a21f-a68f-47f4-9392-9a702727cde8%252FUntitled.png%3Ftable%3Dblock%26id%3D3467cab8-0f87-4ee4-8295-1b70b39ed4f8%26cache%3Dv2&w=3840&q=75&dpl=dpl_9Fy5DR7iXit8HvYKCDvmsFiYTXKA)
그룹화할 컬럼이 3개일 때
✅ 4. CUBE
소그룹 간의 소계 및 총계를 다차원적으로 계산할 수 있는 함수이다. GROUP BY가 일방향으로 그룹화하여 소계를 구했다면, CUBE는 조합할 수 있는 모든 그룹에 대한 소계를 집계한다.
ROLLUP(A) | - A로 그룹화
- 총합계 |
ROLLUP(A, B) | - A, B로 그룹화
- A로 그룹화
- B로 그룹화
- 총합계 |
ROLLUP(A, B, C) | - A, B, C로 그룹화
- A, B로 그룹화
- A, C로 그룹화
- B, C로 그룹화
- A로 그룹화
- B로 그룹화
- C로 그룹화
- 총합계 |
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fe1a18480-88a4-46db-aa53-3a07d94ec86c%252F706a5a3b-6674-4fe3-9690-cadefb12f1e5%252FUntitled.png%3Ftable%3Dblock%26id%3D742ad33b-2c97-4cae-8b1e-e9fd65928bfb%26cache%3Dv2&w=3840&q=75&dpl=dpl_9Fy5DR7iXit8HvYKCDvmsFiYTXKA)
그룹화할 컬럼이 1개일 때
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fe1a18480-88a4-46db-aa53-3a07d94ec86c%252F106713d3-c5d3-480c-876f-4dcdc93a9294%252FUntitled.png%3Ftable%3Dblock%26id%3D0d130beb-2598-49b4-9e46-83549a7c0b70%26cache%3Dv2&w=3840&q=75&dpl=dpl_9Fy5DR7iXit8HvYKCDvmsFiYTXKA)
그룹화할 컬럼이 2개일 때
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fe1a18480-88a4-46db-aa53-3a07d94ec86c%252Fa616bb56-4ebb-417f-bf0b-83514010a6c9%252FUntitled.png%3Ftable%3Dblock%26id%3Dd87fecfe-d67f-4e28-9a03-faa6abdfdc20%26cache%3Dv2&w=3840&q=75&dpl=dpl_9Fy5DR7iXit8HvYKCDvmsFiYTXKA)
그룹화할 컬럼이 3개일 때 (아래 더 있음)
✅ 5. GROUPING SETS
특정 항목에 대한 소계를 계산하는 함수이다. 인자값으로
ROLLUP
이나 CUBE
를 사용할 수 있다.GROUPING SETS(A, B) | - A로 그룹화
- B로 그룹화 |
GROUPING SETS(A, B, ( )) | - A로 그룹화
- B로 그룹화
- 총합계 |
GROUPING SETS(A, ROLLUP(B)) | - A로 그룹화
- B로 그룹화
- 총합계 |
GROUPING SETS(A, ROLLUP(B, C)) | - A로 그룹화
- B, C로 그룹화
- B로 그룹화
- 총합계 |
GROUPING SETS(A, B, ROLLUP(C)) | - A로 그룹화
- B로 그룹화
- C로 그룹화
- 총합계 |
✅ 6. GROUPING
GROUPING
함수는 ROLLUP
, CUBE
, GROUPING SETS
등과 함께 쓰이며 소계를 나타내는 ROW를 구분할 수 있게 해준다. 원래 ROW에서 그룹핑의 기준이 되는 컬럼을 제외하고 모두 NULL 값으로 표현되었지만, GROUPING 함수를 이용하면 원하는 위치에 원하는 텍스트를 출력할 수 있다.![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fe1a18480-88a4-46db-aa53-3a07d94ec86c%252F4a4a0309-10c1-46b3-9f22-541fdb799bf6%252FUntitled.png%3Ftable%3Dblock%26id%3Df0cbb910-1a81-4cd8-989c-4d6e278c4de2%26cache%3Dv2&w=3840&q=75&dpl=dpl_9Fy5DR7iXit8HvYKCDvmsFiYTXKA)
GROUPING()
함수를 사용하면, 그룹화한 컬럼값으로 1을 리턴한다. 저 1을 가지고 아래처럼 특정 값을 넣을 수 있다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fe1a18480-88a4-46db-aa53-3a07d94ec86c%252F35f94e2a-f728-4728-9ba6-767054d74cda%252FUntitled.png%3Ftable%3Dblock%26id%3D786f18d6-7821-41ac-a779-af02249afe8c%26cache%3Dv2&w=3840&q=75&dpl=dpl_9Fy5DR7iXit8HvYKCDvmsFiYTXKA)
GROUPING(deptno)
의 값이 1이면 0을 넣고, 아니라면 원래의deptno
값을 넣도록 설정하여 원래NULL
이었던deptno
값을 채울 수 있다! 단, 넣을 수 있는 값은 원래 컬럼의 데이터 타입과 일치해야 한다.
Share article