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 / Query / 주석

SQL Server / Query / 주석

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

SQL Server 2022 / 설치

SQL Server 2022 / 설치

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

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 / 보안 / 사용자 계정 만들고 권한 추가하는 방법

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

SQL Server의 사용자 계정은 Windows 인증을 이용한 사용자 계정, SQL Server 자체의 사용자 계정이 있습니다. 그 중 SQL Server 자체의 사용자 계정을 만들고, 권한을 부여하는 방법을 알아보겠습니다. SSMS로 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 ) ; 다음과 같이 ...

SQL Server / 오류 22022 / SQLServerAgent가 현재 실행되고 있지 않으므로 이 동작을 알릴 수 없습니다.

SQL Server / 오류 22022 / SQLServerAgent가 현재 실행되고 있지 않으므로 이 동작을 알릴 수 없습니다.

SQL Server에 스케줄에 따라 자동 백업하는 작업을 추가할 때 다음과 같은 메시지가 나왔습니다. SQL Server Agent가 실행되고 있지 않아 작업을 추가할 수 없는 것입니다. SQL Server Agent가 실행 중이 아니어서 발생한 문제이므로, 실행시키면 해결되겠죠? SQL Server가 설치된 컴퓨터의 서비스를 엽니다. Windows Server라면 서버 관리자에서 를 클릭하면 됩니다. 아니면, 실행 창을 ...

SQL Server Express, SSMS, AdventureWorks 설치하는 방법

SQL Server Express, SSMS, AdventureWorks 설치하는 방법

SQL Server Express는 Microsoft가 제공하는 무료 SQL Server입니다. SQL Server Express, 그것을 관리하는 툴인 SSMS(SQL Server Management Studio), 샘플 데이터베이스 AdventureWorks를 설치하는 방법을 알아보겠습니다. SQL Server Express 다음 링크로 접속합니다. https://www.microsoft.com/ko-kr/sql-server/sql-server-downloads 밑으로 조금 내려가면 Express 다운로드 링크가 있습니다. 클릭하면 바로 다운로드합니다. 다운로드한 파일을 실행하면 다음과 같은 창이 나옵니다. 을 클릭합니다. 을 클릭합니다. 설치 위치를 정한 후 를 ...

SQL Server / SSMS / IntelliSense / 자동 완성 기능 사용하는 방법, 설정하는 방법

SQL Server / SSMS / IntelliSense / 자동 완성 기능 사용하는 방법, 설정하는 방법

텍스트 에디터의 경우 코드의 일부분을 입력했을 때 그 문자열을 포함한 코드 리스트를 보여주는 기능이 있다. 이러한 자동 완성 기능을 SSMS에서도 제공하고 있고, IntelliSense라고 한다. 원하는 것을 쉽게 찾고, 오타를 줄일 수 있는 유용한 기능이다. 예를 들어 from 뒤에 문자열을 입력하면 그와 관련된 것이 나오고, 상하 화살표를 이용해 선택한다. 선택한 것을 사용할 ...

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 ; 데이터베이스 사용하기 작업 대상이 되는 데이터베이스를 ...