Notice
Recent Posts
Recent Comments
Links
«   2025/04   »
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
Today
In Total
관리 메뉴

A Joyful AI Research Journey🌳😊

[53] 230315 SQL Ch 5. 집계와 서브쿼리: 20강 행 개수 구하기 - COUNT, 21강 COUNT 이외의 집계함수, 22강 그룹화 - GROUP BY [K-디지털 트레이닝 53일] 본문

🌳Bootcamp Revision✨/Python, Flask, SQL

[53] 230315 SQL Ch 5. 집계와 서브쿼리: 20강 행 개수 구하기 - COUNT, 21강 COUNT 이외의 집계함수, 22강 그룹화 - GROUP BY [K-디지털 트레이닝 53일]

yjyuwisely 2023. 3. 15. 11:50

230315 Wed 53rd class

Ch 5. 데이터의 추가, 삭제, 갱신
진도: p.  182 ~ (교재: SQL 첫걸음, 저자: 아사이 아츠시)
MySQL Workbench Manual: https://dev.mysql.com/doc/workbench/en/
MySQL 튜토리얼: https://www.tutorialspoint.com/mysql/

SQLD 요약 pdf: https://yurimac.tistory.com/40
책 요약 (9p) pdf: https://brunch.co.kr/@ydy702/10

 

SQL 첫걸음 | 아사이 아츠시 - 교보문고

SQL 첫걸음 | 왕초보를 위한 정말 쉬운 SQL 입문서를 만나보자!본격적인 빅데이터 시대에 접어들면서 기존 대비 더 효율적이고 폭넓은 데이터 분석을 위한 수요가 커질 것으로 기대되는 가운데, SQ

product.kyobobook.co.kr

오늘 배운 것 중 기억할 것을 정리했다.


몰랐던 것 정리

집계함수(COUNT, SUM, AVG, MIN, MAX)는 집합 안에 NULL 값이 있을 경우 무시한다. p. 186

문법 작성 순서 
1. SELECT 구 → 2. WHERE 구 → 3. GROUP BY 구 → 4. HAVING 구 → 5. ORDER BY 구

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

예제 1)

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;

예제 2)

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;

참고: https://www.w3schools.com/sql/sql_having.asp

내부처리 순서 p. 200

1. WHERE 구 → 2. GROUP BY 구 → 3. HAVING 구 → 4. SELECT 구 → 5. ORDER BY 구


MySQL에서 오류나는 경우 (p. 206, p. 211)
아래 코드처럼 써야한다.

p. 206
p. 211


5장 집계와 서브쿼리

책의 목차
__20강__행 개수 구하기 - COUNT
1. COUNT로 행 개수 구하기
2. 집계함수와 NULL값
3. DISCOUNT로 중복 제거
4. 집계함수에서 DISTINCT

__21강__COUNT 이외의 집계함수
1. SUM으로 합계 구하기
2. AVG로 평균내기
3. MIN, MAX로 최솟값, 최댓값 구하기

__22강__그룹화 - GROUP BY
1. GROUP BY로 그룹화
2. HAVING 구로 조건 지정
3. 복수열의 그룹화
4. 결괏값 정렬

__23강__서브쿼리
1. DELETE의 WHERE 구에서 서브쿼리 사용하기
2. 스칼라 값
3. SELECT 구에서 서브쿼리 사용하기
4. SET 구에서 서브쿼리 사용하기
5. FROM 구에서 서브쿼리 사용하기
6. INSERT 명령과 서브쿼리

__24강__상관 서브쿼리
1. EXISTS
2. NOT EXISTS
3. 상관 서브쿼리
4. IN

20강 행 개수 구하기 - COUNT

집계함수

COUNT(집합)
SUM(집합)
AVG(집합)
MIN(집합)
MAX(집합)

집계함수는 집합 안에 NULL 값이 있을 경우 무시한다. p. 186


20.1 COUNT로 행 개수 구하기

COUNT

COUNT(집합)

예제 5-1) sample51의 행 개수 구하기

SELECT * FROM sample51;
-- COUNT로 행 개수 계산
SELECT COUNT(*) FROM sample51;

COUNT(*)는 모든 열의 행수를 카운트하므로 NULL 값도 개수에 포함된다.

COUNT는 인수로 지정된 집합(이 경우는 테이블 전체)의 개수를 계산한다. sample51에는 전부 5개의 행이 있으므로 5가 반환되었다.

Point: COUNT 집계함수로 행 개수를 구할 수 있다.


- WHERE 구 지정하기
예제 5-2) sample51의 행 개수를 WHERE 구를 지정하여 구하기

SELECT * FROM sample51 WHERE name = 'A';
SELECT COUNT(*) FROM smaple51 WHERE name = 'A';


20.2 집계함수와 NULL값

예제 5-3) 행 개수를 구할 때 NULL 값 다루기

SELECT * FROM sample51;
SELECT COUNT(no), COUNT(name) FROM sample51; -- null은 무시된다.

COUNT(*): 모든 열의 행수를 카운트하므로 NULL 값이 있어도 해당 정보가 무시되지 않는다.

Point: 집계함수는 집합 안에 NULL 값이 있을 경우 무시한다.


20.3 DISCOUNT로 중복 제거

예제 5-4) sample51 테이블

SELECT * FROM sample51;

A 값이 중복된다.

DISTINCT: 중복된 값을 제거하는 함수

예제 5-5) DISTINCT로 중복 제거하기

SELECT ALL name FROM sample51;
-- DISTINCT를 지정, 콤마를 붙이지 않는다.
SELECT DISTINCT name FROM sample51;

Point: DISTINCT로 중복값을 제거할 수 있다.


20.4 집계함수에서 DISTINCT

예제 5-6) 중복을 제거한 뒤 개수 구하기

SELECT COUNT(ALL name), COUNT(DISTINCT name) FROM sample51;

NULL을 제외한 값의 개수

앞의 예제 5-5를 보면 COUNT(ALL name)의 구성은 A A B C로 총 4개
COUNT(DISTINCT name)의 구성은 A B C로 총 3개인 것을 알 수 있다.


21강 COUNT 이외의 집계함수 (SUM, AVG, MIN, MAX) p. 190

COUNT([ALL|DISTINCT] 집합)
SUM([ALL|DISTINCT] 집합)
AVG([ALL|DISTINCT] 집합)
MIN([ALL|DISTINCT] 집합)
MAX([ALL|DISTINCT] 집합)

21.1 SUM으로 합계 구하기

예제 5-7) SUM으로 합계 구하기

SELECT * FROM sample51;
-- SUM으로 quantity열의 합계 구하기
SELECT SUM(quantity) FROM sample51;

1, 2, 10, 3 -> SUM의 인수로 사용될 집합

Point: 집계함수로 집합의 합계를 구할 수 있다.


21.2 AVG로 평균내기

예제 5-8) AVG로 평균값 구하기

SELECT * FROM sample51;
SELECT AVG(quantity), SUM(quantity)/COUNT(quantity) FROM sample51;

NULL 값은 무시됐다. 16 / 4 = 4이다.

Point: AVG 집계함수로 집합의 평균값을 구할 수 있다.


예제 5-9) AVG로 평균값 계산 (NULL을 0으로 변환)

SELECT AVG(CASE WHEN quantity IS NULL THEN 0 ELSE quantity END)
	AS avgnull0 FROM sample51;

2023.03.14 - [🌳K-Digital Revision 2023✨/SQL, MariaDB] - [52] 230314 [K-디지털 트레이닝 52일] SQL Ch 3. 정렬과 연산: 9강 정렬 - ORDER BY, 10강 복수의 열을 지정해 정렬하기, 11강 결과 행 제한하기 - LIMIT, 12강 수치 연산, 13강 문자열 연산, 14강 날짜 연산, 15..

case when 조건식1 then 식1 else 식3 end

수업의 더 간단한 방법)

IFNULL 사용으로도 가능하다.


21.3 MIN, MAX로 최솟값, 최댓값 구하기

예제 5-10) MIN, MAX로 최솟값, 최댓값 구하기

SELECT * FROM sample51;
SELECT MIN(quantity), MAX(qunatity), MIN(name), MAX(name) FROM sample51;

1: quantity의 최솟값, 10: quantity의 최댓값


22강 그룹화 - GROUP BY

GROUP BY

SELECT * FROM 테이블명 GROUP BY 열1, 열2, ...

22.1 GROUP BY로 그룹화

예제 5-11) sample51 테이블

SELECT * FROM sample51;

-- GROUP BY 구에 name열을 지정해 그룹화하기
SELECT name FROM sample51 GROUP BY name;

예제 5-12) name 열로 그룹화하기

GROUP BY: 지정된 열의 값이 같은 행이 하나의 그룹으로 묶인다.

Point: GROUP BY 구로 그룹화할 수 있다.


예제 5-13) name 열을 그룹화해 계산하기

-- GROUP BY 구의 집계함수를 조합
SELECT name, COUNT(name), SUM(quantity)
	FROM sample51 GROUP BY name;


22.2 HAVING 구로 조건 지정

The HAVING clause was added to SQL because the WHERE keyword cannot be used with aggregate functions.

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

참고: https://www.w3schools.com/sql/sql_having.asp

Point: WHERE 구에서는 집계함수를 사용할 수 없다.


예제 5-14) HAVING을 사용해 검색

SELECT name, COUNT(name) FROM sample51 GROUP BY name;

-- HAVING구로 걸러내기
SELECT name, COUNT(name) FROM sample51 
	GROUP BY name HAVING COUNT(name) = 1;

Point: 집계함수를 사용할 경우 HAVNIG 구로 검색조건을 지정한다.

문법 작성 순서
1. SELECT 2. WHERE  3. GROUP BY 4. HAVING → 5. ORDER BY 구

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);



내부처리 순서

1. WHERE 구 2. GROUP BY  3. HAVING  4. SELECT 구 → 5. ORDER BY 구


2023.03.14 - [🌳K-Digital Revision 2023✨/SQL, MariaDB] - [52] 230314 [K-디지털 트레이닝 52일] SQL Ch 3. 정렬과 연산: 9강 정렬 - ORDER BY, 10강 복수의 열을 지정해 정렬하기, 11강 결과 행 제한하기 - LIMIT, 12강 수치 연산, 13강 문자열 연산, 14강 날짜 연산, 15..

SELECT SQL 문법 작성 순서 (사용자 작성)

 1. SELECT 열명 (5)
 FROM 테이블명 (1)
 2. WHERE 조건식 (2)
 3. GROUP BY 그룹화할 열명 (3)
 4. HAVING 그룹하고 난 후의 조건식 (4)
 5. ORDER BY 정렬하고자 하는 열명 (6)

SELECT SQL 쿼리 실행 순서 (DBMS 내부 처리) 

 FROM: 조회 테이블 확인 
 1. WHERE: 데이터 추출 조건 확인
 2. GROUP BY: 그룹핑
 3. HAVING: 그룹한 후 조건
 4. SELECT: 데이터 추출
 5. ORDER BY: 데이터 순서 정렬 

Point: 집계함수를 사용할 경우 HAVING 구로 검색조건을 지정한다.


22.3 복수열의 그룹화

집계함수를 사용하면 집합은 하나의 값으로 계산되므로, 그룹마다 하나의 행을 출력할 수 있다.

SELECT MIN(no), name, SUM(quantity) FROM sample51 GROUP BY name;

Point: GROUP BY에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.


no와 quantity로 그룹화한다면 아래처럼 한다.

SELECT no, quantity FROM sample51 GROUP BY no, quantity;


22.4 결괏값 정렬

예제 5-15) 집계한 결과 정렬하기

-- name 열로 그룹화해 합계를 구하고 내림차순으로 정렬
SELECT name, COUNT(name), SUM(quantity)
	FROM sample51 GROUP BY name ORDER BY SUM(quantity) DESC;


728x90
반응형
Comments