[손에 잡히는 10분 SQL - 벤 포터 지음, 박남혜 옮김] 책의 학습 후 정리자료입니다.
📍 그룹 함수 사용하기
- 데이터를 실제로 가져오지 않고 데이터를 요약해야 할 때 SQL은 그룹 함수를 제공한다.
- 그룹 함수는 분석이나 보고를 목적으로 데이터를 가져올 수 잇다.
- 테이블에 행의 수를 확인한다.
- 테이블에 있는 여러 행의 합계를 구한다.
- 테이블에서 모든 행이나 특정행에 있는 가장 큰 값, 가장 작은 값, 평균값을 구한다.
- 실제 테이블 데이터를 가져오는 것은 시간과 자원의 낭비가 될 수 있다.
- 데이터베이스에서 데이터 그자체가 아니라 데이터의 요약정보가 필요할 때 사용한다.
📒 그룹 함수
- 여러 행에 대한 연산을 수행하고, 하나의 값을 반환하는 함수
함수 | 설명 |
---|
AVG() | 열의 평균값을 반환한다. |
COUNT() | 열에 있는 행의 개수를 반환한다. |
MAX() | 열의 최대값을 반환한다. |
MIN() | 열의 최소값을 반환한다. |
SUM() | 열의 합계를 반환한다. |
📌 AVG() 함수
- 테이블에 있는 행의 수와 각 행의 합을 계산해 특정 열의 평균값을 반환한다.
- 모든 열의 평균값을 구하거나 특정 열 또는 행의 평균값을 구할 수 있다.
SELECT AVG(prod_price) AS avg_price
FROM Products;

Products
테이블에 있는 제품 가격(prod_price
)의 평균값을 avg_price
에 저장하여 반환한다.
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';

Products
테이블에 있는 vend_id
가 DLL01
인 제품의 제품 가격(prod_price
)의 평균값을 avg_price
에 저장하여 반환한다.
❗️ 하나의 열만 사용 가능한 AVG() 함수
- AVG()는 숫자열 하나의 평균값을 구하는 데 사용할 수 있으며, 매개변수로 열 이름을 적어주어야 한다.
- 여러 열에 대한 평균값을 얻고 싶다면, 여러 개의 AVG() 함수를 사용해야 한다.
✏️ NULL 값
- AVG() 함수는 NULL 값을 가진 행은 무시한다.
📌 COUNT() 함수
- COUNT() 함수는 행의 개수를 세는 함수이다.
- COUNT()를 사용해서 테이블에 있는 행의 수나 지정한 조건을 만족하는 행의 수를 구할 수 있다.
- 테이블에 있는 모든 행의 수를 세기 위해 COUNT(*)를 사용한다. NULL 값을 가진 열을 포함하여 행의 수를 센다.
- 지정한 열에 값이 있는 행의 수를 세기 위해 COUNT(열 이름)를 사용한다. 이때 NULL 값을 가진 행은 무시된다.
SELECT COUNT(*) AS num_cust
FROM Customers;

Customers
테이블에 있는 고객의 수를 가져온다.
SELECT COUNT(cust_email) AS num_cust
FROM Customers;

- 이메일(
cust-email
)의 값이 NULL이 아닌 고객의 수를 가져온다.
✏️ NULL 값
- 열 이름이 지정된 경우 COUNT() 함수는 NULL 값을 가진 행은 무시한다. 하지만 애스터리스크(*)를 사용하면, NULL 값을 가진 행도 포함하여 행의 개수를 계산한다.
📌 MAX() 함수
- MAX() 함수는 지정한 열에서 가장 큰 값을 반화한다.
SELECT MAX(prod_price) AS max_price
FROM Products;

Products
테이블에서 prod_price
의 값 중 가장 큰 값을 가져온다.
💡 문자열에서 MAX() 사용하기
- MAX()는 보통 숫자나 날짜 데이터에서 가장 큰 값을 구하기 위해 사용하지만, 많은 DBMS는 문자열 데이터가 있는 열에서도 MAX()를 지원한다.
- 문자열 데이터에 MAX() 함수를 사용하면, MAX()는 데이터가 열로 정렬된 경우 가장 마지막에 있는 행을 반환한다.
✏️ NULL 값
- MAX() 함수는 NULL 값을 가진 행은 무시한다.
📌 MIN() 함수
- MIN() 함수는 지정한 열에서 가장 작은 값을 반환한다.
SELECT MIN(prod_price) AS min_price
FROM Products;

Products
테이블에서 prod_price
의 값 중 가장 작은 값을 가져온다.
💡 문자열에서 MIN() 사용하기
- MIN()은 보통 숫자나 날짜 데이터에서 가장 작은 값을 구하기 위해 사용하지만, 많은 DBMS는 문자열 데이터가 있는 열에서도 MIN()를 지원한다.
- 문자열 데이터에 MIN() 함수를 사용하면, MIN()은 데이터가 열로 정렬된 경우 가장 처음에 있는 행을 반환한다.
✏️ NULL 값
- MIN() 함수는 NULL 값을 가진 행은 무시한다.
📌 SUM() 함수
SELECT SUM(item_price*quantity) AS total_price
FROM OrderItems
WHERE order_num = 20005;
Orderitems
테이블에서 order_num
의 값이 20005
인 아이템의 가격(item_price
) 와 재고(quantity
)를 곱한 값을 가져온다.
✏️ NULL 값
- SUM() 함수는 NULL 값을 가진 행은 무시한다.
📍 중복되는 값에 대한 그룹 함수
- ALL을 쓰거나 아무런 키워드도 쓰지 않으면 모든 행에 대한 계산을 수행한다.
- ALL 키워드는 default값으로 사용된다.
- 중복되는 값을 제거하기 위해 DISTINCT 키워드를 사용한다.
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';

📍 그룹 함수 결합하기
- SELECT 문에는 필요한 만큼의 그룹 함수를 사용할 수 있다.
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products

❗️ 별칭 만들기
- 그룹 함수의 결과를 저장할 별칭을 지정할 때는 테이블에 있는 실제 열 이름은 사용하지 않도록 노력하자.
- 실제 사용하고 있는 열 이름을 사용하는 게 잘못된 것은 아니지만, 많은 DBMS에서 이를 지원하지 않는다.
📍 도전 과제
OrderItems
에 있는 quantity
열을 사용해 판매 수량의 총합계를 구하는 SQL 문을 작성하라.
SELECT SUM(quantity)
FROM OrderItems;

- 방금 작성한 문장을 수정하여
BR01
항목의 총합계를 구하는 SQL 문을 작성하라.
SELECT SUM(quantity)
FROM OrderItems
WHERE prod_id = 'BR01';

Products
테이블에서 가격이 10
또는 그 이하 중에서 가장 비싼 제품의 가격(prod_price
)을 가져오는 SQL 문을 작성하라. 계산된 필드를 max_price
라고 하자.
SELECT MAX(prod_price) AS max_price
FROM Products
WHERE prod_price <= 10;
