SQL Server 2014: 실습10 GROUP BY, HAVING 집계 함수 등

뇌를 자극하는 SQL Server 2012 기본편 217페이지

–GROUP BY–

그룹으로 묶어주는 역할

clip_image001

USE sqlDB;
SELECT userID, amount FROM buyTbl ORDER BY userID;

사용자별로 여러 번의 물건 구매가 이루어져 합계를 보고 싶어졌다.

clip_image002

SELECT userID, sum(amount) FROM buyTbl GROUP BY userID;

구매한 개수를 SUM()함수로 합친 뒤 출력. 집계 함수는 주로 GROUP BY와 함께 사용됨.

clip_image003

SELECT userID AS [사용자 아이디], sum(amount) AS [총 구매 개수] FROM buyTbl GROUP BY userID;

별칭을 사용해 보기 좋게 만들기

clip_image004

SELECT userID AS [사용자 아이디], SUM(price*amount) AS [총 구매액] FROM buyTbl GROUP BY userID;

가격*수량으로 총 구매액 계산함.

–집계 함수–

함수명

설명

AVG()

평균

MIN()

최소값

MAX()

최대값

COUNT()

행의 개수

COUNT_BING()

개수(, 결과값이 bigint )

STDEV()

표준편차

VAR()

분산

clip_image005

SELECT AVG(amount) AS [평균구매개수] FROM buyTbl;

전체 구매자가 구매한 물품의 개수의 평균. 사실은 2.9166개인데 int값으로 나옴

clip_image006

SELECT AVG(amount*1.0) AS [평균구매개수] FROM buyTbl;

1.0을 곱하거나…

clip_image007

SELECT AVG(CAST(amount AS DECIMAL(10,6))) AS [평균구매개수] FROM buyTbl;

CAST() 함수로 제대로 보여줄 수도 있음.

clip_image008

SELECT userID, AVG(amount*1.0) AS [평균구매개수] FROM buyTbl GROUP BY userID;

사용자별로 물건을 평균 몇 번 구매했는지 구함

clip_image009

SELECT name, height FROM userTbl
WHERE height = (SELECT MAX(height) FROM userTbl)
OR height = (SELECT MIN(height) FROM userTbl);

키가 가장 작은 사람과 큰 사람을 출력

clip_image010

SELECT COUNT(*) FROM userTbl;

전체 회원 10명 출력

clip_image011

SELECT COUNT(mobile1) AS [휴대폰이 있는 사용자] FROM userTbl;

휴대폰이 있는 사용자만 카운트

clip_image012

메시지 탭을 열어보면 Null 값이 제거되었다고 알려줌.

–COUNT()와 SELECT의 결과 비교–

clip_image013

위와 같이 SQL Server Profiler 실행

clip_image014

USE AdventureWorks;
GO
SELECT * FROM Sales.Customer;
GO
SELECT COUNT(*) FROM Sales.Customer;
GO

위 구문 실행.

clip_image015

COUNT(*)과 SELECT *의 Duration 차이가 크다.

–Having절–

clip_image016

SELECT userID AS [사용자], SUM(price*amount) AS [총구매액]
FROM buyTbl GROUP BY userID;

사용자별 총 구매액

clip_image017

SELECT userID AS [사용자], SUM(price*amount) AS [총구매액]
FROM buyTbl WHERE SUM(price*amount) > 1000 GROUP BY userID;

총 구매액이 1000이상인 사용자만 찾으려고 하니… 집계 함수가 WHERE 절에 나타날 수가 없다고 한다.

clip_image018

SELECT userID AS [사용자], SUM(price*amount) AS [총구매액]
FROM buyTbl GROUP BY userID HAVING SUM(price*amount) > 1000;

HAVING 절은 GROUP BY 다음에 나와야 한다.

clip_image019

SELECT userID AS [사용자], SUM(price*amount) AS [총구매액]
FROM buyTbl GROUP BY userID HAVING SUM(price*amount) > 1000
ORDER BY SUM(price*amount);

총구매액이 적은 사용자부터 출력하기 위해 ORDER BY 절 사용

–ROLLUP절–

clip_image020

SELECT num, groupName, SUM(price*amount) AS [비용]FROM buyTbl GROUP BY ROLLUP (groupName, num);

총합 또는 중간 합계가 필요하다면… ROLLUP을 사용.(맨 아래에는 총합계가 나옴)

clip_image021

SELECT groupName, SUM(price*amount) AS [비용]FROM buyTbl GROUP BY ROLLUP (groupName);

소합계 및 총합계만 필요하면 name을 빼면 됨.

clip_image022

SELECT groupName, SUM(price*amount) AS [비용],
GROUPING_ID(groupName) AS [추가행여부]FROM buyTbl GROUP BY ROLLUP (groupName);

GROUPING_ID가 1이면 합계를 위해 추가된 열이라고 보면 됨.

–CUBE 함수–

clip_image023

위와 같은 테이블을 만듦.

clip_image024

SELECT prodName, color, SUM(amount) AS [수량합계]FROM CUBETEST1
GROUP BY CUBE (color, prodName);
GROUP BY CUBE를 사용해 물품별, 색상별 소합계를 모두 볼 수 잇음.

77은 모니터 소합계, 33은 컴퓨터 소합계, 110은 총합계, 검정과 파랑의 44, 66은 색상별 소합계가 출력됨.

이것도 살펴보세요!

Windows용 PIP 설치하기(How to Install PIP For Python on Windows)

PIP란? pip는 파이썬으로 작성된 패키지 소프트웨어를 설치 · 관리하는 패키지 관리 시스템이다. Python Package Index …

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다