SQL Group By 및 이것과 자주쓰이는 함수

·2024년 4월 2일
0

MySQL

목록 보기
5/14
post-thumbnail

Group By

동일한 데이터를 요약 혹은 집계하여 하나의 행으로 만든다.

SELECT author_lname, COUNT(*) AS books_written  FROM books GROUP BY author_lname ORDER BY books_written DESC; 
-- author_lname을 선택하여 author_lname 기준으로 소규모 그룹핑을 진행.
-- author_lname 기준으로 집계된 그룹핑된 데이터를 COUNT 함수를 사용하여 몇 개 인지 수치화
-- 내림차순으로 재정렬

다중 열 Group By

SELECT CONCAT(author_fname, " ", author_lname) AS authorName , COUNT(*) FROM books GROUP BY authorName;

MIN(), MAX()

특정 행에서의 최솟값 or 최댓값을 찾아낸다.
행 뿐만 아니라 특정 그룹에서도 찾아낼 수 있음.

-- 가장 페이지 수가 많은 책의 제목을 찾고싶다면? (서브쿼리 사용)
SELECT title, pages FROM books WHERE pages = (SELECT MAX(pages) FROM books);

Group by로 min, max 사용

-- 각 작가가 처음으로 책을 출간한 연도 찾기
SELECT CONCAT(author_fname, " ", author_lname) AS author, MIN(released_year) AS firstRelease, MAX(released_year) AS currentRelease, COUNT(*) AS releaseCount FROM books GROUP BY author;

SUM()

주어진 값의 합을 구한다.

SELECT SUM(pages) FROM books;
-- books 테이블의 pages 행의 값을 모조리 합한 값

SELECT author_lname, SUM(pages) FROM books GROUP BY author_lname;

AVG()

값의 평균을 구할 때 사용하는 함수

-- 특정 년도의 평균 재고량 산출
SELECT released_year, AVG(stock_quantity) FROM books GROUP BY released_year;

DISTINCT

중복제거. 주로 SELECT 다음에 적용한다.

응용문제 답

-- 섹션9 문제
SELECT COUNT(*) FROM books;

SELECT released_year, CONCAT(COUNT(released_year), "권") FROM books GROUP BY released_year;

SELECT SUM(stock_quantity) FROM books;

SELECT CONCAT(author_fname, " " ,author_lname) AS author, AVG(released_year) FROM books GROUP BY author; 

SELECT CONCAT(author_fname, " ", author_lname) as author, title, pages FROM books WHERE pages = (SELECT MAX(pages) FROM books);

SELECT released_year, COUNT(*) AS '# Books', AVG(pages) as avgPages FROM books GROUP BY released_year ORDER BY released_year;
profile
- 배움에는 끝이 없다.

0개의 댓글