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 )
;

 

같은 카테고리의 다른 글
SQL Server / 관리 / 스케줄에 따라 자동 백업하는 방법

SQL Server / 관리 / 스케줄에 따라 자동 백업하는 방법

데이터베이스는 주기적으로 백업을 해야 합니다. SQL Server의 유지 관리 계획을 이용하면, 백업 되풀이 작업을 만들어 일정 주기마다 자동으로 백업하게 할 수 있습니다. SSMS로 자동 백업을 만드는 방법을 알아보겠습니다. 을 선택합니다. 마우스 우클릭하고 를 클릭합니다. 을 클릭합니다. 이름을 적절히 정하고 을 클릭합니다. 를 선택하고 ...

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

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

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

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 / 데이터베이스 / 만들기, 삭제하기, 수정하기, 조회하기

데이터베이스 만들기 데이터베이스는 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 2022 / 설치 / 인스턴스 추가하는 방법

SQL Server 2022 / 설치 / 인스턴스 추가하는 방법

Microsoft 홈페이지에서는 SQL Server의 인스턴스를 다음과 같이 설명하고 있다. 데이터베이스 엔진 인스턴스는 운영 체제 서비스로 실행되는 sqlservr.exe 실행 파일의 복사본입니다. 각 인스턴스는 여러 시스템 데이터베이스와 하나 이상의 사용자 데이터베이스를 관리합니다. 각 컴퓨터에서 데이터베이스 엔진의 여러 인스턴스를 실행할 수 있습니다. 단순하게 이해하자면, 하나의 OS에 여러 SQL Server를 설치할 수 있다고 보면 된다. 기존 ...

SQL Server / 외부 접속 허용하는 방법

SQL Server / 외부 접속 허용하는 방법

SQL Server는 보통 Windows Server에 설치하게 되는데, 외부에서 접속하기 위해서는 SQL Server가 사용하는 1433 포트를 열어줘야 한다. 설정은 에서 한다. SQL Server의 기본 포트는 1433이다. 가능하다면 보안을 위해 다른 포트로 변경하는 것이 좋다. 별도의 방화벽에서 포트 포워딩을 할 수도 있고, 기본 포트를 변경할 수도 있다. 에서 ...

SQL Server / Query / 주석

SQL Server / Query / 주석

주석으로 처리하면 해당 문자열은 실행되지 않습니다. 코드에 설명을 달거나 특정 쿼리를 잠시 실행시키고 싶지 않을 때 사용합니다. 주석에는 한 줄 주석과 여러 줄 주석이 있습니다. 한 줄 주석은 --로 만듭니다. -- 뒤에 있는 문자열이 주석이 됩니다. -- Commnet SELECT * FROM myDB; -- Comment 여러 줄 주석을 만들고 싶다면 /*와 */로 감쌉니다. 그 사이에 있는 ...

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을 쓰는 게 불편하다면 단축키를 ...

SQL Server 2022 / SQL Server 서비스 시작, 중지, 다시 시작하는 방법

SQL Server 2022 / SQL Server 서비스 시작, 중지, 다시 시작하는 방법

SQL Server의 서비스를 시작, 중지, 다시 시작하는 방법은 여러 가지가 있다. 그 중 UI를 이용하는 세 가지 방법을 소개한다. SQL Server Configuration Manager SQL Server Configuration Manager를 연다. 왼쪽에서 를 선택한다. 오른쪽에서 SQL Server를 선택하고 마우스 우클릭한다. 원하는 서비스 관련 작업을 클릭한다. SSMS SSMS로 SQL Server에 접속한다. 개체를 선택하고 마우스 우클릭한다. 원하는 서비스 관련 작업을 클릭한다. 서비스 SQL Server를 ...

SQL Server / Query / ROLLUP

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 ) ; 다음과 같이 ...