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는 열에 따라 그룹을 모아 집계를 내기 위한 사용하는 구문이다.
HAVING은 GROUP 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 |