본문 바로가기
Back-End/DataBase [ MySQL]

[MySql] 데이터 집계함수들_ COUNT, GROUP BY, Min, Max, SUM, AVG

by 개도필 2022. 6. 25.

COUNT

  • 데이터의 개수를 세는 것
SELECT COUNT(*) FROM books;
  • 다른 쓰임 ( + DISTINCT)
    • 저자이름 중복제거 해서 count
SELECT COUNT(DISTINCT author_lname) FROM books;
  • 다른쓰임 2 ( + LIKE)
    • ‘the’ 가 들어간 title의 개수는?
SELECT COUNT(*) FROM books WHERE title LIKE '%the%';

or 

SELECT COUNT(title) FROM books WHERE title LIKE '%the%';

 

 

Group By의 즐거움

  • 동일한 데이터를 각각의 단일 행으로 요약, 집계해준다.
  • 다른 함수들과 어울려서 사용된다.
  • 평균과 같은 것을 구할 수 있다.
  • 예시
    • 모든 책을 가져와 출간 연도별로 분류하거나,
    • 저자의 성을 기준으로 분류,
    • 데이터 베이스에 있는 모든 차를 가져오거나 등
  • 적용 코드
SELECT author_fname, author_lname, COUNT(*) FROM books GROUP BY author_lname;
  • 적용코드 2
SELECT author_fname, author_lname, COUNT(*) FROM books GROUP BY author_lname, author_fname;
  • 적용코드 3
SELECT CONCAT('In ', released_year, ' ', COUNT(*), ' book(s) released') AS year FROM books GROUP BY released_year;

 

 

Min , Max

  • 테이블의 최솟값 ,최대값을 찾을 수 있다.
  • 코드 예제 (Min, Max 작동 방식 동일)
    • 전체 테이블에서 가장 빠른 출간 연도를 찾는 것
    SELECT Min(released_year) FROM books;
    
    • 가장 작은 페이지수 를 찾는것
    SELECT Max(pages) FROM books; 
    

 

 

  • 만약 가장 긴 title의 이름을 찾고 싶다면 ?
    • 이렇게 하면 잘못된 값이 나온다.
    → 결과값 : max(page)에 해당하는 title이 나오지 않고, 첫번째 행의 title이 나온다.
    • Max와 title이 독립적으로 작동하기 때문에 생긴 문제
SELECT Max(pages), title FROM books;

 

하위쿼리를 이용

  • 단점 : 느리다.
  • 괄호안에 있는 쿼리가 먼저 실행되고, 그 밖에 쿼리가 실행된다.
SELECT * FROM books 
**WHERE pages = (SELECT Max(pages) FROM books);**
  • 괄호 안의 쿼리 후에 실행 모습
SELECT * FROM books
WHERE pages = 634

# 634 => 테이블 내에서 최대 page수

 

 

Group By + Min , Max

  • 예제
    • 각 저자가 자신의 첫번째 책을 출간한 연도를 구하라
      • 성이 같고 이름이 다른 두 저자가 있을 수 있기 때문에 GROUP BY author_lname, author_fname 이용
        SELECT author_fname, 
        			 author_lname,
        			 Min(released_year)
        FROM books
        GROUP BY author_lname,
        				 author_fname;
        ​

  • 깔끔하게 출력하기
SELECT
  CONCAT(author_fname, ' ', author_lname) AS author,
  MAX(pages) AS 'longest book'
FROM books
GROUP BY author_lname,
         author_fname;

 

데이터 모으기 : Sum

  • 모든 데이터를 하나로 모아주는 함수
  • 코드
    • 테이블내의 모든 페이지의 합을 구해주는 쿼리
SELECT Sum(pages) From books;

 

GRUP BY + Sum

  • 예시
    • 각 저자가 쓴 페이지 전부, 즉 페이지의 합을 조회하라
    • 어떤 저자가 누적으로 가장 높은 수의 페이지를 썻는지 알 수 있다.
    • 코드
SELECT author_fname, author_lname ,Sum(pages) FROM books GROUP BY author_fname, author_lname

 

데이터의 평균 : AVG

  • 여럿을 합친 후 몇개가 합쳐졌는지에 기준해서 그 수로 나눈다.
  • 예시 쓰임
    • 특정 월에 어떤 상품의 판매 평균을 낸다.
    • 데이터베이스 안의 무언가의 평균 가격을 구한다.
  • 예시
    • 모든 책의 데이터에서 평균 출간 년도를 구해라
    SELECT AVG(released_year) FROM books ;
    

 

Group By + AVG

  • 예시
    • 같은 해에 출간된 책의 평균 재고 수량
    SELECT released_year,AVG(stock_quantity) FROM books GROUP BY released_year;
    

댓글