1. Count

 

# Counting all rows

 

'Apple Stock prices dataset'에서 dataset의 행의 수를 카운트한다고 하자. 

 

# Counting individual columns (distinctive values)

 

같은 dataset에서 특정한 column의 non-null인 행의 수를 카운트하고 싶다고 하자. 

'high'라는 column에 해당하는 value가 null이 아닌 행들을 세어준다.

 

이번에는 특정 column에서 서로 다른 value가 몇 개가 있는지 카운트하고 싶다고 하자. (+중복제거)

 

SELECT  COUNT  (DISTINCT 컬럼명)

FROM   테이블명

 

 


2. Sum

 

특정 행의 모든 값들을 합을 구해준다.

count 와 다르게 (당연히..?) 해당 column의 모든 값이 numerical value이어야 가능하다.

 

'volume'이라는 column의 모든 value의 합을 구해준다.

 

NULL값들은 0으로 처리한다. 

 

위 두 함수를 바탕으로 average opening price (opening 가격의 평균)을 구해보자. 

'open'열의 value들의 합을 구한 다음, value들의 갯수로 나눠주면 될 것이다.

 

SELECT SUM(open)/COUNT(open) AS avg_open_price
FROM tutorial.aapl_historical_stock_price

 

 

 

 


 

3. Min/Max

 

특정 행의 값들 중 최솟값과 최댓값을 return 해준다. 

count 처럼 column의 모든 값이 numerical value이 아니어도, 즉 날짜 또는 문자여도 가능하다.

Min에 대하여 날짜의 경우, 가장 앞선 날짜가 나타날 것이고, 문자의 경우에는 알파벳 순서에 따라 'a'부터 나올 것이다. 

Max는 정확히 그 반대이다. 

 

'volume' column에서 min, max값을 구해주는 쿼리

 

 

추가로, apple stock price의 시초가를 나타내는 column이 'open'이고, 마감가를 나타내는 column이 'close'일 때 하루 중 가장 주식가가 많이 올랐을 때의 증가값을 구하고 싶을 때는 어떻게 할까? 

 

SELECT MAX (close - open )
FROM tutorial.aapl_historical_stock_price

 


 

4. Avg

 

특정 그룹에 해당하는 value들의 평균값을 구해준다. * numerical value일 때만 적용 가능하며, null-value들을 아예 포함하지 않고 계산한다. (즉, 0으로 취급하는게 아니라, 아예 없는 것으로 취급함)

 

그러니까, 아래 두 개의 쿼리에 대한 결과값이 같다는 것 !!

 

처음부터 조건으로 not null인 행들만 고르는 거랑,
그렇게 고르지 않고 그냥 구하는거랑, 결과값이 완전히 같음

 

 

위에서 (2번의 예제) sum(high) / count(*)로 바꿔 입력하면 not null인 행의 value를 0으로 대입해서 계산될 것이다. 

ex. 값이 1,2,3,4,null 이면

AVG(high)   또는    SUM(high)/COUNT(high)의 결과값은   (1+2+3+4) / 4 = 2.5

SUM(high) / COUNT(*)의 결과값은 (1+2+3+4) / 5 = 2

 

 


 

기억해야 할 점은 모든 aggregate 함수는 열 안에서만 연산이 된다는 것이다. 

행 간 연산은 앞에 나왔던 arithmetic 함수를 이용해야 한다. 

 

 

# 참고자료

https://mode.com/sql-tutorial/sql-count/

https://mode.com/sql-tutorial/sql-sum/

https://mode.com/sql-tutorial/sql-min-max/

https://mode.com/sql-tutorial/sql-avg/

 

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

SQL : Distinct  (0) 2023.07.10
SQL : Group by  (0) 2023.07.10
SQL : not, order by  (0) 2023.07.01
SQL : is null, and, or  (0) 2023.07.01
SQL : logical operator : like, in, between  (0) 2023.07.01