SQL : Group by

Jiwon Kim
|2023. 7. 10. 15:19

 


 

Group by

 

# Grouping by a single column

 

data를 group으로 나눈 다음에 group별로 aggregate 할 수 있도록 해준다. 

'Apple Stock prices dataset'에서 년도 별로 data(row)가 몇 개(행)씩 있는지 세기?

 

이용하고자 하는 aggregate 함수를 select와 from 사이에, group by 절은 from 뒤에 붙인다.

sum, avg, min, max와 같은 aggregate 함수는 어떤 column의 value들을 계산할 것인지 지정이 필요하기 때문에 

sum( ), avg( ), min( ), max( ) 등 ( ) 안에 계산하려는 column명을 명시해야 하지만

count( ) 함수의 경우 어떤 열을 선택하던, 그 결과값은 동일하기 때문에 

보통 count(1) 또는 count(*)로 입력한다. 

 


 

# 열 간 연산 후, grouping by a column

 

( )안에  하나의 column말고 column들끼리의 simple arithmetic을 넣어도 상관없다. 

 

예를 들어, 아래의 "market_sale"  table에서 

"판매품목" 별 , 매출 (가격 * 수량의 합)을 구하고 싶다고 하자. 

 

판매품목 가격 수량
A 1,000 3
C 3,000 2
B 2,000 1
B 2,000 4
A 1,000 2

 

 

위의 쿼리에 대한 결과물은 아래와 같을 것이다.

 

판매품목 판매액
A 5,000
C 6,000
B 10,000

 

+ 여기서 추가로 판매액이 높은 순서대로 (판매액 내림차순) 정렬하고 싶다면 group by 뒤에 order by ~절을 추가해주면 된다

   select   판매품목,

   sum  (가격 * 수량)   as   판매액

   from   market_sale

   group by    판매품목

   order by     판매액     desc                (sql 별로 '판매액'이라고 적으면 정렬이 안되는 경우가 있으므로, 이 때는 '가격 * 수량'이라고 적으면 됨)

 

 


# Grouping by multiple columns

 

같은 dataset에서 두 개의 열( 'year' & 'month' )에 대하여 grouping하고 싶다고 하자. 

 

 

위의 쿼리에 대한 결과는 아래와 같은 형식일 것이다. 

 

year month count
... ... ...

 

+ 추가로 grouping 하는데 기준이 되는 열이 너무 많거나, group by 절 뒤에 오는 text가 너무 길다면 편의상 숫자를 이용하여도 쿼리는 같은 결과를 도출한다. 위의 예시에서 

     group by    year, month    부분을

     group by        1  ,    2            로 바꿔주어도 결과는 동일하다. 

 

+  조건을 추가하고 싶을 때 : where 절 활용

     from 절 뒤, group by 절 앞에 삽입되어야 한다.

     select ~~~, sum (  ) 

     from ~~~

     where ~~~~

     group by ~~

     order by ~~

 

 


+ 참고자료

https://mode.com/sql-tutorial/sql-group-by/

 

 

'Study > SQL' 카테고리의 다른 글

SQL : Having  (0) 2023.07.14
SQL : Distinct  (0) 2023.07.10
SQL : Aggregate functions : Count, Sum, Min/Max, Avg  (0) 2023.07.06
SQL : not, order by  (0) 2023.07.01
SQL : is null, and, or  (0) 2023.07.01