SQL Server / Query / ROLLUP

부분합 등을 구하고 싶다면 ROLLUP을 사용한다.

기본

  • 다음과 같은 sales 테이블이 있다고 하자. team은 소속, man은 직원, sales는 판매액이다.
select
  *
from sales
;

  • 다음과 같이 하면 직원별 소계, 팀별 소계, 전체 합계가 출력된다.
select
  id,
  team,
  man,
  sum( sales ) as sales
from sales
group by rollup ( team, man, id )
;

  • 다음과 같이 해도 결과는 같다.
select
  id,
  team,
  man,
  sum( sales ) as sales
from sales
group by team, man, id with rollup
;

집계함수 외의 열은 모두 포함되어야 한다. 예를 들어 아래처럼 id 열은 그룹화하지 않으면서 출력하고자 하면 에러가 난다.

select
  id,
  team,
  man,
  sum( sales ) as sales
from sales
group by rollup ( team, man )
;

그룹화하는 열을 출력하지 않는 것은 가능하다.

select
  team,
  man,
  sum( sales ) as sales
from sales
group by rollup ( team, man, id )
;

그룹에 대한 합계인지 확인하기

  • grouping 함수를 이용하면 그룹에 대한 합계인지 아닌지 확인할 수 있다.
  • 그룹합이라면 1을, 아니라면 0을 출력한다.
select
  id,
  team,
  man,
  sum( sales ) as sales,
  grouping( id ) as group_1,
  grouping( man ) as group_2,
  grouping( team ) as group_3
from sales
group by rollup ( team, man, id )
;

NULL 대신 다른 값 출력하기

  • grouping 함수의 값을 이용하여 NULL 대신 의미에 맞는 값을 출력할 수 있다.
select
  case
    when grouping( id ) = 1 and grouping( man ) = 1 then '총합계'
    when grouping( id ) = 1 then '개인합계'
    when grouping( id ) = 0 then man
  end as man,
  sum( sales ) as sales
from sales
group by rollup ( man, id )
;

 

Related Posts

SQL Server / 스키마 / 만들기, 조회하기, 수정하기, 삭제하기

스키마(Schema)를 이용하여 테이블을 분류하고 권한 관리를 할 수 있다. 스키마 만들기 a라는 이름의 스키마를 만든다. create schema a; 스키마 조회하기 스키마 정보를 출력한다. select * from sys.schemas; 테이블 만들기 스키마 지정 없이 테이블을 만들면 dbo 스키마가 붙는다. create table client ( id int ); 스키마를 지정하고 만들면, 그 스키마에 테이블이 만들어진다. create table a.client ( id int ); dbo.client와 a.client는 테이블 이름은 ...

SQL Server 2022 / 설치

SQL Server 설치 DVD 또는 ISO 파일 안에 있는 setup 파일을 더블 클릭하여 실행한다. 왼쪽에서 를 클릭한다. 무료 버전을 선택하거나 제품 키를 입력 후 을 클릭한다. 약관에 동의하고 을 클릭한다. 체크 안 해도 되지만, 권장사항이므로 인터넷에 연결되어 있다면 [Microsoft 업데이트를 통해 업데이트 ...

SQL Server / SSMS / 테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함 설정 변경하는 방법

SQL Server / SSMS / 테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함 설정 변경하는 방법

SSMS로 테이블 작업을 할 때 다음과 같은 메시지와 함께 저장이 되지 않는 경우가 있다. 변경 내용을 저장할 수 없습니다. 변경 내용을 적용하려면 다음 테이블을 삭제하고 다시 만들어야 합니다. 다시 만들 수 없는 테이블을 변경했거나 옵션을 설정했습니다. 테이블 열의 순서를 변경하는 등 특정 ...

SQL Server / SSMS / 글꼴 변경하는 방법

SQL Server / SSMS / 글꼴 변경하는 방법

SQL Server 관리는 보통 SSMS(SQL Server Management Studio)로 한다. 다른 툴도 많이 있지만, 전용 도구가 갖는 장점이 많이 있기 때문이다. 보통 한글 버전을 설치하게 되는데, 쿼리 창 기본 글꼴이 돋움체이다. 만약 이 글꼴이 마음에 들지 않는다면 옵션에서 변경할 수 있다. 변경은 에서 한다. 에서 글꼴을 설정해주면 끝. 개인적으로 ...

SQL Server / 보안 / 사용자 계정 만들고 권한 추가하는 방법

SQL Server / 보안 / 사용자 계정 만들고 권한 추가하는 방법

SQL Server의 사용자 계정은 Windows 인증을 이용한 사용자 계정, SQL Server 자체의 사용자 계정이 있습니다. 그 중 SQL Server 자체의 사용자 계정을 만들고, 권한을 부여하는 방법을 알아보겠습니다. SSMS로 SQL Server에 접속합니다. 을 선택합니다.(확장하면 전체 사용자 목록을 볼 수 있습니다.) 마우스 우클릭하고 을 클릭합니다. 사용자를 추가하는 창이 뜹니다. 을 선택하고... 로그인 ...

SQL Server / 샘플 데이터베이스 AdventureWorks 설치하는 방법

SQL Server / 샘플 데이터베이스 AdventureWorks 설치하는 방법

만약 공부에 필요한 샘플 데이터베이스가 필요하다면 Micrososft에서 제공하는 AdventureWorks를 사용하자. AdventureWorks 샘플 데이터베이스 페이지에 접속하여 백업 파일을 다운로드한다. AdventureWorks는 OLTP 데이터베이스, AdventureWorksDW는 OLAP 데이터베이스, AdventureWorksLT는 AdventureWorks의 경량 및 축소 버전이다. 디스크 공간이 충분하다면 AdventureWorks와 AdventureWorksDW를 설치하자. SSMS에서 를 선택하고... 마우스 우클릭 후 을 클릭한다. 를 선택하고, 찾아보기 아이콘을 클릭한 후... 를 클릭하고... 다운로드한 파일을 선택하고 을 클릭한다. 을 ...

SQL Server / Query / GO

예를 들어 DB라는 데이터베이스를 만들고, ID라는 열을 갖는 TB라는 테이블을 만든다고 하자. 쿼리로 만드는 경우 다음과 같이 할 수 있는데... CREATE DATABASE DB; USE DB; CREATE TABLE TB ( ID int ); 다음과 같은 에러가 난다. 데이터베이스 'DB'이(가) 없습니다. 이름을 제대로 입력했는지 확인하십시오. 이런 경우 GO를 사용한다. GO를 기준으로 해서 GO 위의 쿼리 실행을 마친 후 ...

SQL Server / 데이터베이스 / 만들기, 삭제하기, 수정하기, 조회하기

데이터베이스 만들기 데이터베이스는 create database로 만든다. shop이라는 이름의 데이터베이스를 만든다. create database shop; 데이터베이스 이름에 띄어쓰기 또는 특수문자가 있는 경우 큰 따옴표 또는 대괄호로 감싼다. create database "shop.shop"; create database ; 데이터베이스 삭제하기 데이터베이스는 drop database로 삭제한다. drop database shop; 데이터베이스 이름에 띄어쓰기 또는 특수문자가 있는 경우 큰 따옴표 또는 대괄호로 감싼다. drop database "shop.shop"; drop database ; 데이터베이스 사용하기 작업 대상이 되는 데이터베이스를 ...

SQL Server / Query / 메모

최근 날짜 가져오기 Name으로 그룹화한 후 최근 날짜를 가져온다. SELECT Name, MAX( Date ) FROM Table1 GROUP BY Name 최근 날짜가 2020년인 것만 가져온다. SELECT Name, MAX( Date ) FROM Table1 GROUP BY Name HAVING MAX( Date ) BETWEEN '2020-01-01' AND '2020-12-31' 모든 데이터베이스 출력하기 EXECUTE sp_helpdb;

SQL Server / SSMS / 메모

SQL Server / SSMS / 메모

1433 이외의 포트로 접속하는 방법 SQL Server 기본 포트는 1433이다. 기본 포트일 때는 IP나 도메인만으로 접속가능한데, 포트를 바꾸었다면 명시해주어야 한다. 예를 들어 IP가 123.123.123.123, 포트가 12345로라면... 123.123.123.123,12345 특이하게 :가 아니라 ,를 쓴다. SSMS에서 대문자를 소문자로, 소문자를 대문자로 만드는 방법 SQL 구문은 대소문자를 구분하지 않지만 보통 대문자로 표현한다. Shift를 누르거나 Caps Lock을 쓰는 게 불편하다면 단축키를 ...