hyperskill - Aggregate functions 원문
당신이 금융 자문 회사의 비즈니스 애널리스트라고 상상 해 봅시다.
당신은 어제 주식 시장에 무슨 일이 있었는지에 대한 보고서를 준비하는 과정으로 당신의 하루를 시작합니다.
성사된 거래에 대한 정보는 테이블에 저장되어 있는데,
SQL과 호환 가능한 데이터베이스 내부의 몇 십만 줄에 저장되어 있습니다.
간단히 컬럼들의 모든 데이터를 선택하는 것은 동작되지 않는데,
엄청난 크기의 데이터를 넘어서, 추출을 위한 수행 계산은 비현실적이기 때문입니다.
보통의 SQL 기능은 많이 도움이 되지 않는데,
이는 개별적인 각각의 줄에 적용되기 때문이며, 그 결과를 결합하여 제공 할 방도가 없기 때문입니다.
이것을 대체할 수 있는 것은 aggregate functions 이며, 이번 주제는 이에 대한 모든 것 입니다.
General form - 일반적인 형태
집계 함수를 실행하고, 컬럼의 모든 값들을 전달하기 위해서, 밑의 구문을 따라 사용하세요 :
SELECT AGG_FUNCTION(column_name)
FROM table_name;
함수는 지정된 컬럼의 모든 값들을 가져오고, 하나의 셀을 결과로서 생산합니다.
따라서, n 개의 집계 함수를 구동시키는 것은 동시에 n 개의 셀을 생산합니다.
서로 다른 SQL 호환 가능 데이터베이스 관리 시스템 공급자들은
그들의 유저에게 약간 다른 집계 함수들의 집합을 제공합니다.
여기 ANSI SQL 표준에 따른 집계 함수들의 리스트가 있습니다.
ANSI SQL : American National Standard Institution
데이터베이스 시스템 공급 업체들에게 제안, 혹은 권유하는 문법을 의미한다고 보면 됩니다.
- MIN - 최소값
- MAX - 최대값
- AVG - 평균
- COUNT - 몇 개인지 세기
- SUM - 모든 컬럼의 합
통계와 관련된 더 정교한 기능들이 있습니다.
STDDEV_POP
(population standard deviation) 혹은 CORR
(correlation coefficient)
더 많은 기능을 확인하고자 한다면, 이 페이지를 참고하세요.
Example - 예제
stocks
이름을 가진 테이블을 고려 해 봅시다.
stock_name | price | yesterday_deals |
---|---|---|
WTI | 89.8 | NULL |
NVAX | 26.3 | 5 |
GSPC | 18.9 | 20 |
DJI | 40 | 2 |
NYSE | 15.6 | 13 |
TCHENY | 52.7 | 5 |
FB | 63.7 | 20 |
MAX
기능을 사용해서, 우리는 모든 주식 중에서 가장 높은 가격의 주식을 쉽게 찾을 수 있습니다.
SELECT MAX(stocks)
FROM stocks;
이 쿼리는 89.9을 생산합니다.
비슷하게, 같은 컬럼에서의 MIN
기능은 15.6을 줄 겁니다.
만약 우리가 어제 만든 거래들의 총합을 알고 싶다면, 이 쿼리를 사용 할 수 있습니다 :
SELECT SUM(yesterday_deals)
FROM stocks;
이는 65
를 리턴합니다.
INT, REAL과 비슷한 수학적 타입은 대부분의 집계 함수들에 자연스럽게 들어맞습니다.
하지만, 몇몇 경우에도 다른 데이터 타입들에 집계 함수들이 사용되는 것은 말이 됩니다.
예를 들어, MIN
그리고 MAX
함수는 사전적으로 가장 작은 문자열과 가장 큰 문자열을 찾는 데 사용합니다.
우리는 직접 실험해 보는 것을 장려하며,
서로 다른 집계함수들이 다른 타입의 데이터에서 어떻게 작동되는지 보기 바랍니다!
풀어쓰기 :
MIN
,MAX
함수는 각자 가장 큰, 혹은 가장 작은, 스트링이 다수 존재 할 때,
작은 것을 사전적으로 정렬하여 가장 앞에 오는 것은MIN
큰 것을 사전적으로 정렬하여 뒤에 오는 것을MAX
로 정의 할 수 있습니다.
Adding WHERE - 집계 함수에 WHERE 추가하기
또한, 우리가 집계 함수를 실행시키고 싶은 줄들에서,
WHERE
를 사용하여 하위 집합을 선택하는 것이 가능합니다.
예를 들어, 모든 주식들에서, 40 보다 더 비용이 큰 줄들에 대해 평균 가격과 평균 거래 횟수를 찾아봅시다 :
SELECT
AVG(price) AS avg_price,
AVG(yesterday_deals) AS avg_deals
FROM
stocks
WHERE
price > 40;
위의 쿼리에 대한 결과는 :
avg_price | avg_deals |
---|---|
68.733333333 | 12.5 |
DISTINCT keyword - DISTINCT 키워드
Distinct 뜻 : 별개의
엄청난 크기의 데이터를 작업할 때, 당신은 아마 모든 중복 값을 생략하는 데 관심이 갈 겁니다.
이를 수행하기 위해, DISTINCT
키워드를 당신의 집계 함수의 괄호 내부에 배치하세요 :
SELECT COUNT(DISTINCT yesterday_deals)
FROM stocks;
이 쿼리는 4
를 반환하는데, 이는 yesterday_deals
컬럼에 오로지 4개의 별개 수학 값이 있기 때문입니다.
고유 값들의 집합을 결정하는 것은 계산 복잡성 측면에서 비용이 많이 드므로, DISTINCT
를 남용하지 마세요.
당신이 정말로 중복 값을 생략하는 것이 필요한지, 이는 최종 결과에 어떻게 영향을 끼칠 수 있는지 항상 생각하세요.
COUNT( * ) - 집계 함수 COUNT( * )
COUNT
의 일반적인 호출은 컬럼 이름과 함께 선언되며, 이는 간단히 컬럼 내부의 총량 값을 셉니다.
COUNT
를 별표와 함께 호출한다면, 당신이 함수에게 테이블에 존재하는 모든 줄들을 세라고 말하는 것 입니다.
최종 결과는 테이블의 셀에 저장되어 있는 값이나, 컬럼의 특정 타입에 의해 영향을 받지 않습니다.
우리의 stocks 테이블에서는, COUNT(*)
은 7
을 반환합니다.
COUNT(*)
을 제외한 모든 집계 함수는 NULL
값들을 무시합니다.
Conclusion - 결론
이번 주제에서는, 우리는 몇몇 표준 집계 함수들을 겪었고, 해당 함수의 특별한 기능을 조사했습니다.
집계 함수들을 잘 알고 있지 않은 상태로 중요한 제품을 작업한다는 것은 상상하기 어렵습니다.
이제 실용적인 문제들로 움직이며, 당신이 문제를 잡을 수 있는지 확인 해 봅시다!
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introducing to SQL' 카테고리의 다른 글
Subqueries - 서브쿼리 (0) | 2024.04.29 |
---|---|
GROUP BY statement - GROUP BY 문법 (0) | 2024.04.28 |
Inserting selected rows - 선택된 줄 삽입하기 (0) | 2024.04.26 |
Updating selected rows - 선택된 줄들 업데이트하기 (1) | 2024.04.25 |
Basic UPDATE statement - 기초적인 UPDATE 문법 (0) | 2024.04.25 |