일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- nvl
- SQL내장함수
- Window Functions
- 3개월 완독 챌린지
- SQL개발자
- AVG
- SQL문자형함수
- sql
- SQLD
- Group Functions
- sql전문가
- sqlp
- Atomic Habit
- SQL연산자
- Aggregation Function
- 연관 서브 쿼리
- Searched Case Expression
- SQL Grouping Functions
- CASE중첩
- 다중 열 서브 쿼리
- Simple Case Expression
- SUM
- SQL기본
- 데이터모델링
- 단일 행 서브 쿼리
- null
- Where
- Cloud ERP
- SQL숫자형 함수
- Britcent 3개월 완독 챌린지
Archives
- Today
- Total
슴슴한 IT
[SQLD,SQLP]SQL기본 - GROUP BY, HAVING 절 본문
728x90
집계함수
데이터베이스의 열 데이터들을 그룹화하거나 집계하여 통계적 또는 요약정보로 변환
주로 SELECT문에서 사용되며, GROUP BY 절과 함께 사용
집계함수명 ( [DISTINCT | ALL] 컬럼이나 표현식 )
- COUNT(): 특정 컬럼의 값 개수를 세는 함수입니다. NULL 값을 제외하고 세기 때문에 주로 PRIMARY KEY나 UNIQUE 제약 조건이 적용된 컬럼에 사용됩니다.
- SUM(): 특정 숫자 컬럼의 합계를 계산하는 함수입니다. NULL 값을 무시하고 합을 계산합니다.
- AVG(): 특정 숫자 컬럼의 평균을 계산하는 함수입니다. NULL 값을 무시하고 평균을 계산합니다.
- MIN(): 특정 컬럼에서 최소 값을 찾는 함수입니다.
- MAX(): 특정 컬럼에서 최대 값을 찾는 함수입니다.
- GROUP_CONCAT() 또는 STRING_AGG(): 특정 컬럼의 값을 문자열로 결합하는 함수로, GROUP BY와 함께 사용될 때 그룹 내에서 문자열 결합이 이루어집니다.
COUNT( ) : 특정 컬럼의 값 갯수를 세는 함수
SELECT COUNT(*) AS total_students
FROM students;
SUM( ) : 특정 숫자 컬럼의 합계를 계산하는 함수
SELECT SUM(sales_amount) AS total_sales
FROM sales;
AVG( ) : 특정 숫자 컬럼의 합계를 계산하는 함수
SELECT AVG(price) AS average_price
FROM products;
MIN( ) : 특정 컬럼에서 최소 값을 찾는 함수
SELECT MIN(age) AS youngest_age
FROM employees;
MAX( ) : 특정 컬럼에서 최대 값을 찾는 함수
SELECT MAX(salary) AS highest_salary
FROM employees;
GROUP_CONCAT(), STRING_AGG() : 특정 컬럼의 값을 문자열로 결합
SELECT department, GROUP_CONCAT(employee_name) AS employee_list
FROM employees
GROUP BY department;
SELECT department, STRING_AGG(employee_name, ', ') AS employee_list
FROM employees
GROUP BY department;
728x90
GROUP BY, HAVING
특징
- GROUP BY 절을 통해 소그룹별 기준을 정한 후 SELECT절에서 집계함수를 사용
- 집계함수의 통계 정보는 NULL 값을 가진 행은 제외하고 수행
- GROUP BY절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없음
- 집계함수는 WHERE 절에는 사용할 수 없음 => WHERE절이 먼저 수행
- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거
- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계함수를 이용한 조건을 표시
- GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한
- HAVING절은 GROUP BY 절 뒤에 위치
ORDER 테이블에서 각 고객별로 주문된 제품의 총 가격을 조회하되, 총 지출액이 50보다 큰 고객들만 조회하는 경우,
ORDER 테이블
ORDER_ID | CUSTOMER_ID | PRODUCT_ID | QUANTITY | UNIT_PRICE |
1 | 101 | 201 | 2 | 10 |
2 | 102 | 202 | 3 | 8 |
3 | 101 | 203 | 1 | 5 |
4 | 103 | 201 | 4 | 10 |
5 | 102 | 204 | 2 | 15 |
SELECT customer_id, SUM(quantity * unit_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(quantity * unit_price) > 50;
--결과
customer_id | total_spent
-------------------------
102 | 54
CUSTOMER_ID 101는 ( 2 × 10 ) + ( 1 × 5 ) = 25,
CUSTOMER_ID 102는 ( 3 × 8 ) + ( 2 × 15 ) = 54,
CUSTOMER_ID 102는 ( 4 × 10 ) = 40
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
'SQL' 카테고리의 다른 글
[SQLD, SQLP]SQL기본 - ORDER BY (0) | 2023.08.11 |
---|---|
[SQLD, SQLP]SQL기본 - 집계함수와 NULL 처리 (0) | 2023.08.10 |
[SQLD, SQLP]SQL기본 - 논리/부정연산자 (0) | 2023.08.07 |
[SQLD,SQLP]SQL기본 - SQL연산자 (0) | 2023.08.06 |
[SQLD,SQLP]SQL기본 - WHERE 비교연산자 (0) | 2023.08.04 |