1. Count
# Counting all rows
'Apple Stock prices dataset'에서 dataset의 행의 수를 카운트한다고 하자.
# Counting individual columns (distinctive values)
같은 dataset에서 특정한 column의 non-null인 행의 수를 카운트하고 싶다고 하자.
이번에는 특정 column에서 서로 다른 value가 몇 개가 있는지 카운트하고 싶다고 하자. (+중복제거)
SELECT COUNT (DISTINCT 컬럼명)
FROM 테이블명
2. Sum
특정 행의 모든 값들을 합을 구해준다.
count 와 다르게 (당연히..?) 해당 column의 모든 값이 numerical 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는 정확히 그 반대이다.
추가로, 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으로 취급하는게 아니라, 아예 없는 것으로 취급함)
그러니까, 아래 두 개의 쿼리에 대한 결과값이 같다는 것 !!
위에서 (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 |