[MSSQL] 요약정보 만들기
데이터베이스/Mssql

[MSSQL] 요약정보 만들기

반응형

01_집계함수 사용하기

함수

매개변수

표현식

AVG

([ALL|DISTINCT]숫자 표현식)

표현식의 전체나 각각의 평균값

COUNT

([ALL|DISTINCT]숫자 표현식)

표현식 전체나 각각의 개수

COUNT

(*)

선택된 모든 행의 개수

MAX

(숫자 표현식)

표현식에서 가장 큰 값

MIN

(숫자 표현식)

표현식에서 가장 작은 값

SUM

([ALL|DISTINCT]숫자 표현식)

수치 표현식에서 전체나 각각의 합계

--제품의 모든 가격을 더하여 제품의 개수로 나눌 때

--전체 레코드 개수로 나눈 경우와 가격 항목 개수로 나눈 경우를 비교

SELECT SUM(가격)/COUNT(가격), SUM(가격)/COUNT(*)

FROM 제품

위에 결과값을 보면 평균값이 다르게 나왔다. 왜 그럴까?

 

우선 COUNT(가격)의 값과 COUNT(*)값을 비교해 보자.

 

SELECT SUM(가격) AS [SUM(가격)], COUNT(가격) AS [COUNT(가격)], COUNT(*) AS [COUNT(*)]

FROM 제품

COUNT(가격) COUNT(*)의 값이 2의 차이를 나타내는 이유는 가격 열에 NULL 값이 있는 행이 2개가 있기 때문이다. COUNT(*)NULL행도 포함하여 계산하고 COUNT(가격)NULL을 제외하고 계산한다.

 

*결과 값이 같은 SELECT문 3가지

SELECT SUM(가격)/COUNT(*)

FROM 제품

WHERE 가격 IS NOT NULL;

 

SELECT SUM(가격)/COUNT(가격)

FROM 제품

 

SELECT AVG(가격)

FROM 제품

 

02_GROUP BY / HAVING

집계함수는 대부분 GROUP BY절과 함께 사용한다.

GROUP BY는 열에 따라 그룹을 모아 집계를 내기 위한 사용하는 구문이다.

HAVINGGROUP BY를 적용하여 그룹별 집계를 낸 결과 값들 중에서 조건에 맞는 것들을

골라낼 때 사용하는 구문이다.

 

SELECT *

FROM 제품

 

--종류별로 평균 가격을 구하는 SQL구문

SELECT 종류,AVG(가격) AS 종류별가격

FROM 제품

GROUP BY 종류

 

--HAVING절을 이용하여 5만원 이상 인 것만 추려낸 구문

SELECT 종류,AVG(가격) AS 종류별가격

FROM 제품

GROUP BY 종류

HAVING AVG(가격) >= 50000;

 

03_GROUP BY ALL

 

--GROUP BY ALL

SELECT 종류,AVG(가격) AS 평균가격

FROM 제품

WHERE 가격>= 50000

GROUP BY ALL 종류

 

--GROUP BY

SELECT 종류, AVG(가격) AS 평균가격

FROM 제품

WHERE 가격>=50000

GROUP BY 종류

 

--종류별 평균가격을 구하면서 '점퍼''셔츠'는 검색조건에서 제외

--그러나 결과에 나타나도록 하였다.

SELECT 종류, AVG(가격) AS 평균가격

FROM 제품

WHERE 종류 NOT IN ('점퍼','셔츠')

GROUP BY ALL 종류

 

04_ROLLUP

 

SELECT ,성별,AVG(점수) AS 평균점수

FROM 성적

GROUP BY ,성별 WITH ROLLUP

반응형

'데이터베이스 > Mssql' 카테고리의 다른 글

[MSSQL] SELECT 문  (0) 2020.04.30
[MSSQL] Transact-SQL?  (0) 2020.04.30