SQL 정리 : Grouping, Aggregate

Notura·2024년 9월 22일
post-thumbnail

Grouping, Aggregation 시작하기


Grouping

-> 테이블의 많은 열들을 중복되지 않는 값들의 group으로 줄인다.

SELECT user_id // 예시 코드
FROM comments
GROUP BY user_id; // group by 키워드 사용

comments 테이블을 user_id 값으로 grouping 했다. 이때 기존의 다른 컬럼의 값은 조회할 수 없다. 오직 user_id만 조회할 수 있다. 기존 컬럼을 활용한 작업을 하고 싶으면 Aggregate 함수를 이용해야한다. 이렇게하면 comments 테이블에 수많은 user_id값이 있었다 해도 마치 set collection처럼 중복되지 않은 값만 보여준다. 그리고 같은 user_id 를 가진 열끼리 각자의 그룹으로 묶는다.


Aggregation

-> 그룹 컬럼에 연산을 할 수 있다.

SELECT SUM(id) // sum() 연산 예시 
FROM comments;

다양한 Aggregate 연산자들

  1. count() : 값의 개수
  2. sum() : 총합 연산자
  3. avg() : 평균 연산자
  4. min() : 최솟값 연산자
  5. max() : 최댓값 연산자

Grouping과 Aggregation을 같이 사용하면 더 강력하다

SELECT user_id, COUNT(id)
FROM comments
GROUP BY user_id;

한 user_id가 가진 comments의 개수를 출력하는 기능의 코드이다. Grouping과 Aggregation을 같이 사용함으로서 더 강력한 기능을 수행하는 모습이다.

🎯 COUNT(id)를 했을때 id 값이 null이면 count는 세지 않는다. 그런데 null값도 count 값에 추가하려면 모든 대상을 세는 COUNT(*) 을 써야한다.

🚨 좀 생각해야 하는 문제
이 두 테이블에서 작가의 이름과 그 작가가 출판한 책의 개수를 출력하라


💯Solution

select name, count(*)
FROM books
join authors ON authors.id = books.author_id
group by name;

profile
고통을 즐기자

0개의 댓글