Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 지네릭스
- 데베
- 백준
- 리액트 네이티브 프로젝트 생성
- 모두의 네트워크
- 백준 4358 자바
- 팀플회고
- 깃 연동
- 모두를위한딥러닝
- 리액트 네이티브 시작하기
- 머신러닝
- 네트워크
- 리액트 네이티브
- 데이터베이스
- 스터디
- 백준 4358번
- HTTP
- 딥러닝
- React Native
- SQL
- 깃허브 로그인
- 깃 터미널 연동
- 모두의네트워크
- 백준 5525번
- 문자열
- 자바
- 정리
- 깃허브 토큰 인증
- 백준 4949번
- 모두를 위한 딥러닝
Archives
- Today
- Total
솜이의 데브로그
20-22강 ) 집계, 그룹화 본문
Reference : SQL 첫걸음
20강 ) 행 개수 구하기 - COUNT
대표적인 집계함수
- COUNT
- SUM
- AVG
- MIN
- MAX
1. COUNT로 행 개수 구하기
SELECT COUNT(*) FROM sample51;
- SQL은 집합을 다루는 집계함수를 제공한다. 인수로 집합을 지정.
- 위의 식에서는 테이블에 있는 행의 개수를 출력한다.
- 이 때 COUNT 집계함수는 '모든 열 = 테이블 전체'라는 의미로 사용한다.
- 집계함수는 집합으로부터 하나의 값을 반환한다.
- 즉, COUNT 집계함수로 행 개수를 구할 수 있다.
WHERE 구 지정
SELECT COUNT(*) FROM sample51 WHERE name='A';
- SELECT구는 WHERE구보다 나중에 내부적으로 처리된다.
- 따라서 WHERE구로 조건을 지정하면 테이블 전체가 아닌, 검색된 행이 COUNT로 넘겨진다.
- 즉, WHERE 구의 조건에 맞는 행의 개수를 반환한다.
2. 집계함수와 NULL 값
SELECT COUNT(no), COUNT(name) FROM sample51;
- COUNT 인수로 열명을 지정할 수 있다.
- 열 명을 지정하면 그 열에 한해서 행의 개수를 구할 수 있다.
- 집계함수는 집합 안에 NULL 값이 있을 경우 이를 제외하고 처리한다.
- COUNT(*) 를 하는 경우에는 모든 열의 행수를 카운트하기 때문에 NULL 값이 있어도 해당 정보가 무시되지 않는다.
- 집계 함수는 집합 안에 NULL 값이 있을 경우 무시한다.
3. DISTINCT로 중복 제거
SELECT DISTINCT name FROM sample51;
- 데이터가 중복되지 않는 '유일한 값'을 가지도록 중복된 값을 제거하는 함수를 DISTINCT라 한다.
- SELECT 구에서 DISTINCT를 지정하면 중복된 데이터를 제외한 결과를 클라이언트로 반환한다.
- ALL, DISTINCT 중 어느것도 지정하지 않은 경우 중복된 값은 제거되지 않는다. 즉, 생략한 경우 ALL 로 간주한다.
4. 집계함수에서 DISTINCT
SELECT COUNT(ALL name), COUNT(DISTINCT name) FROM sample51;
- 집계함수의 인수로 DISTINCT를 사용한 수식을 지정할 수 있다.
- 위의 식에서는 name열에서 NULL 값을 제외하고, 중복하지 않는 데이터의 개수를 반환한다.
21강 ) COUNT 이외의 집계 함수
1. SUM으로 합계 구하기
SELECT SUM(quantity) FROM sample51;
- SUM 집계함수를 사용해 집합의 합계를 구할 수 있다.
- SUM 집계함수에 지정되는 집합은 수치형 뿐이다.
- 문자열형이나 날짜시간형의 집합에서 합계를 구할 수는 없다.
- SUM 집계함수도 마찬가지로 NULL 값을 무시한다. 따라서 NULL 값을 제거한 뒤에 합계를 낸다.
2. AVG로 평균내기
SELECT AVG(quantity), SUM(quantity)/COUNT(quantity) FROM sample51;
- AVG 집계함수를 통해 평균값을 간단하게 구할 수 있다.
- AVG 집계함수에 주어지는 집합은 수치형만 가능하다.
- 또한 NULL 값은 무시하므로 NULL 값 제거 뒤에 평균값을 계산한다.
- NULL 값을 0으로 간주해서 평균내고 싶은 경우 CASE를 사용해 NULL을 0으로 변환 뒤 계산한다.
Ex)
SELECT AVG(CASE WHEN quantity IS NULL THEN 0 ELSE quantity END) AS avgnull0 FROM sample51;
3. MIN, MAX로 최솟값, 최댓값 구하기
SELECT MIN(quantity), MAX(quantity), MIN(name), MAX(name) FROM sample51;
- MIN, MAX 집계함수를 사용해 집합에서 최솟값과 최댓값을 구할 수 있다.
- 문자열형과 날짜시간형에도 사용할 수 있다.
- NULL 값은 무시한다.
22강 ) 그룹화 - GROUP BY
GROUP BY 구를 사용해 집계함수로 넘겨줄 집합을 그룹으로 나눈다.
1. GROUP BY로 그룹화
SELECT name FROM sample51 GROUP BY name;
- 위의 식에서 name 열에서 같은 값을 가진 행끼리 묶어 그룹화한 집합을 집계함수로 넘겨줄 수 있다.
- 그룹으로 나눌 때 GROUP BY 구를 사용하여 그룹화할 열을 지정할 수 있다.
- GROUP BY 구에 열을 지정하여 그룹화하면 지정된 열의 값이 같은 행이 하나의 그룹으로 묶인다.
- 결과적으로 각각의 그룹 값이 반환된다.
- 따라서 GROUP BY를 지정해 그룹화하면 DISTINCT와 같이 중복을 제거하는 효과가 있다.
GROUP BY 함수를 집계함수와 같이 사용해보자.
SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name;
- 점포별, 상품별, 월별, 일별 등 특정 단위로 집계할 때 GROUP BY를 자주 사용한다.
- 매출 실적을 조사하는 동시에 SUM 집계함수로 합계를 낼 수 있으며, COUNT로 건수를 집계하기도 한다.
2. HAVING 구로 조건 지정
SELECT name, COUNT(name) FROM sample51 GROUP BY name HAVING COUNT(name)=1;
- 집계 함수는 WHERE구의 조건식에서는 사용할 수 없다.
- WHERE구로 행을 검색하는 처리가 GROUP BY로 그룹화하는 처리보다 순서상 앞서기 때문이다.
- 내부 처리 순서는 다음과 같다.
- WHERE → GROUP BY → SELECT → ORDER BY
- 따라서 집계한 결과에서 조건에 맞는 값을 따로 걸러내기 위해서는 HAVING 구를 사용한다.
- HAVING 구는 GROUP BY구의 뒤에 기술하며 WHERE 구와 동일하게 조건식을 지정할 수 있다.
내부처리 순서
WHERE → GROUP BY → HAVING → SELECT → ORDER BY
3. 복수열의 그룹화
SELECT MIN(no), name, SUM(quantity) FROM sample51 GROUP BY name;
- GROUP BY에 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 기술해서는 안된다.
- GROUP BY로 그룹화하면 클라이언트로 반환되는 결과는 그룹당 하나의 행이 된다.
- 이 때 집계함수를 사용하면 집합은 하나의 값을 계산되므로, 그룹마다 하나의 행을 출력할 수 있다.
GROUP BY에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.
4. 결괏값 정렬
SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name ORDER BY SUM(quantity) DESC;
- GROUP BY로 구로 그룹화한 경우에도 ORDER BY를 사용해 정렬할 수 있다.
- 기본값은 ASC이다.
'CS > Database' 카테고리의 다른 글
23,24강 ) 서브쿼리, 상관 서브쿼리 (0) | 2021.11.14 |
---|---|
7장 ) 트랜잭션과 동시성 제어 (0) | 2021.11.14 |
6장 ) SQL문의 기본 : Select(2) (0) | 2021.11.06 |
16-19강 : 데이터의 추가, 삭제, 갱신 (0) | 2021.10.31 |
6장 ) SQL문의 기본 : Select (0) | 2021.10.31 |