그룹 함수
https://yurison.tistory.com/24?category=1077673
COUNT
SELECT COUNT(컬럼_이름) FROM 테이블_이름; # NULL이 아닌 row의 개수 출력
SELECT COUNT(*) FROM 테이블_이름; # NULL 포함 => 모든 row의 개수 출력
MAX
SELECT MAX(컬럼_이름) FROM 테이블_이름;
MIN
SELECT MIN(컬럼_이름) FROM 테이블_이름;
AVG
SELECT AVG(컬럼_이름) FROM 테이블_이름;
SELECT TRUNCATE(AVG(컬럼_이름), 0) FROM 테이블_이름; # 소수점 0개로 출력
SUM
SELECT SUM(컬럼_이름) FROM 테이블_이름;
GROUP BY
SELECT SUM(컬럼1) FROM 테이블_이름 GROUP BY 컬럼2;
- 컬럼2의 내용이 같은 row가 한 그룹으로 묶여 컬럼1이 SUM 된다.
GROUP_CONCAT
SELECT GROUP_CONCAT(컬럼1) FROM 테이블_이름 GROUP BY 컬럼2;
SELECT GROUP_CONCAT(DISTINCT 컬럼1 ORDER BY ... SEPARATOR '구분자') FROM 테이블_이름 GROUP BY 컬럼2;
- 컬럼1 내용이 그룹 별로 합쳐져서 출력된다.
- DISTINCT : 중복 제거
IF / CASE
SELECT IF(컬럼 = 1, 'ㅁㅁㅁ', 'ㄴㄴㄴ') ...
# 컬럼의 내용이 1 이면 ㅁㅁㅁ이고, 1이 아니면 ㄴㄴㄴ이다.
SELECT CASE
WHEN 컬럼 = 내용1 THEN '...'
WHEN 컬럼 = 내용2 THEN '...'
ELSE '...' END ~
CONCAT()
SELECT CONCAT(COUNT(*), '명') ... # COUNT(*) 결과 + '명' 출력
FORMAT()
SELECT FORMAT(1000, 1); # 1,000.0
- 숫자 단위를 보기 좋게 출력, 두번째 숫자는 소수점의 개수
IFNULL()
SELECT IFNULL(content, '-');
- content가 NULL이 아니면 content로 출력, NULL이면 '-'로 출력
쿼리 실행 순서
FROM, JOIN -> ON, WHERE -(2차 테이블 완성)-> GROUP BY -> 그룹 함수 -(3차 테이블 완성)-> HAVING -> ORDER BY -> LIMIT ...
HAVING
SELECT ... FROM 테이블 ... HAVING 컬럼 = MAX(컬럼); // 컬럼의 내용이 MAX(컬럼)인 경우만 출력
- 그룹 함수로 필터링하고 싶을 때(WHERE은 순서 상 불가능)
UNION
SELECT 1 AS id
UNION
SELECT 2
UNION
SELECT 3;
- 각 테이블을 합쳐서 반환하는 일회성 테이블. 컬럼 개수가 같아야 함
SELECT 1
UNION
SELECT 1; # 중복되면 하나는 생략된다.
- 생략 안 되게 하려면 UNION ALL
서브 쿼리
SELECT ... WHERE 컬럼 = (SELECT ... );
- 쿼리 안의 쿼리
JOIN의 차이
A INNER JOIN B : A와 B의 교집합, NULL값은 포함되지 않는다.
A LEFT JOIN(== LEFT OUTER JOIN) B : A를 기준으로 JOIN, A에 NULL 값이 있어도 최소 하나를 포함한다.
A RIGHT JOIN(== RIGHT OUTER JOIN) B : B를 기준으로 JOIN, B에 NULL 값이 있어도 최소 하나를 포함한다.
'프로젝트 & TIL > 일별 공부 기록 (백엔드 스쿨)' 카테고리의 다른 글
15일차 - HTML/CSS와 테일윈드 (0) | 2023.03.13 |
---|---|
14일차 - DB index (0) | 2023.03.10 |
12일차 - DB 쿼리(1) (0) | 2023.03.08 |
11일차 - 토스트 UI 에디터(폰트, 플러그인)와 깃허브 블로그, DB (0) | 2023.03.07 |
10일차 - 깃 협업과 토스트 UI 에디터 (0) | 2023.03.06 |