[SQL] 9장. 데이터 요약

김상현·2022년 9월 26일
0

SQL

목록 보기
9/22
post-thumbnail

[손에 잡히는 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_idDLL01 인 제품의 제품 가격(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() 함수

  • 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에서 이를 지원하지 않는다.

📍 도전 과제

  1. OrderItems 에 있는 quantity 열을 사용해 판매 수량의 총합계를 구하는 SQL 문을 작성하라.
SELECT SUM(quantity)
FROM OrderItems;

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

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

profile
목적 있는 글쓰기

0개의 댓글