GROUP BY
- 그룹별로 묶어주는 역할을 한다.
- 집계함수에 사용되는 컬럼은 GROUP BY절에 없더라도 사용가능하다.
- 집계함수에 사용되지 않는 컬럼은 GROUP BY 절과 SELECT 절에 함께 써줘야 한다.
PersonType별로 묶어보자
묶어준 PersonType별로 ID 수를 알고 싶을 때 -- 집계함수 사용 (count)
** 집계 함수 **
AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
STDEV() 표준편차
VAR() 분산
SUM() 합계
** 주의사항 **
GROUP BY 없이 별도의 열을 집계 함수와 같이 사용할 수 없다.
가장 큰 키와 가장 작은 키의 회원 이름과 키를 출력 하고 싶다면 ? 아래와 같이 작성 시 오류가 나온다.
1 | SELECT name, MIN(height) , MAX(height) FROM user -- 불가능 | cs |
최저 키와 최대 키는 1개씩 인데 name은 여러개임으로 GROUP BY없이 사용할 수 없다.
집계함수와 열을 함께 사용할 시에는 열을 GROUP BY로 묶어서 사용해야 한다.
name을 GROUP BY 로 묶어 줄 시 , GROUP 별 최저 키와 최대 키를 알 수 있다.
(name으로 묶어 줬기 때문에 중복되는 이름 이 없다면 각각 이름에 해당하는 키가 나올 것이다. )
(중복되는 이름이 있다면 그 이름의 최소 키와 최대키가 보여질 것임)
1 | SELECT name, MIN(height) , MAX(height) FROM user GROUP BY NAME ; --가능 | cs |
이렬경우 서브쿼리를 이용해 아래와 같이 작성하자.
1 2 | SELECT name, height FROM user WHERE height = (SELECT MAX(height) FROM user) OR height = (SELECT MIN(height) FROM user); | cs |
Having
- 집계함수의 조건을 제한하는 것이다.
- WHERE절은 집계함수를 사용 할 수 없다.
- GROUP BY절과 함께 사용되며 GROUP BY 절 다음에 사용된다.
총구매액이 1000 이상인 사용자의 이름과 구매액을 구하여라.
1 2 3 4 | SELECT name, SUM(price) FROM buy GROUP BY name HAVING SUM(price) > 1000; | cs |
'개발 > DB' 카테고리의 다른 글
[mssql] WITH 절 , 비재귀적 CTE (1) | 2019.03.16 |
---|---|
[mssql] ROLLUP() 그룹별 합계 구하기, GROUPING_ID() 사용법 (0) | 2019.03.16 |
[mssql] 중복제거 DISTINCT 사용법 (0) | 2019.03.02 |
[mssql] 서브쿼리뜻 ANY, ALL 사용법 예제 (0) | 2019.02.25 |
[mssql] BETWEEN..AND / IN / LIKE 사용법, 예제, 차이 (0) | 2019.02.24 |