일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array 객체
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey🌳😊
[53] 230315 SQL Ch 5. 집계와 서브쿼리: 20강 행 개수 구하기 - COUNT, 21강 COUNT 이외의 집계함수, 22강 그룹화 - GROUP BY [K-디지털 트레이닝 53일] 본문
[53] 230315 SQL Ch 5. 집계와 서브쿼리: 20강 행 개수 구하기 - COUNT, 21강 COUNT 이외의 집계함수, 22강 그룹화 - GROUP BY [K-디지털 트레이닝 53일]
yjyuwisely 2023. 3. 15. 11:50230315 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)
아래 코드처럼 써야한다.
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는 인수로 지정된 집합(이 경우는 테이블 전체)의 개수를 계산한다. 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;
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;
앞의 예제 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;
Point: 집계함수로 집합의 합계를 구할 수 있다.
21.2 AVG로 평균내기
예제 5-8) AVG로 평균값 구하기
SELECT * FROM sample51;
SELECT AVG(quantity), SUM(quantity)/COUNT(quantity) FROM sample51;
Point: AVG 집계함수로 집합의 평균값을 구할 수 있다.
예제 5-9) AVG로 평균값 계산 (NULL을 0으로 변환)
SELECT AVG(CASE WHEN quantity IS NULL THEN 0 ELSE quantity END)
AS avgnull0 FROM sample51;
수업의 더 간단한 방법)
21.3 MIN, MAX로 최솟값, 최댓값 구하기
예제 5-10) MIN, MAX로 최솟값, 최댓값 구하기
SELECT * FROM sample51;
SELECT MIN(quantity), MAX(qunatity), MIN(name), MAX(name) FROM sample51;
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 구
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;