이번 주제인 '합(total) 연산들'을 서브쿼리에 앞서 포스팅했어야 순서가 맞는데, 메모를 나중에 발견한 관계로 어쩔 수 없이 뒤로 오게됐다. 사실 어려운 내용은 아니라서 함수 이름으로 그 내용을 어느 정도 짐작할 수 있었을 것이다.
● COUNT
행(row)과 값(value)들의 수를 센다.
문법: SELECT COUNT(<컬럼, 표현식>) FROM <테이블>
예 1) 주문 테이블의 모든 행의 개수를 알고 싶다.
SELECT COUNT(*) FROM orders;
주문(orders) 테이블의 모든 행의 개수를 센다. COUNT(*) 연산은 Null 값과 중복된 데이터를 포함한 모든 데이터의 수를 센다.
예 2) 거주하는 동네를 기재한 고객의 수를 센다.
SELECT COUNT(CustCounty) FROM customers;
일반적인 COUNT( ) 함수는 Null 값을 제외한 행(값)의 개수를 센다.
중복된 데이터를 제거하고 고유한 데이터의 개수를 알고 싶다면 COUNT 함수는 DISTINCT 키워드와 함께 사용될 수 있다.
● SUM
SUM 함수는 검색식의 결과 셋의 숫자들을 모두 더한다. 만약 결과 셋의 원소들이 모두 Null 이거나 비어 있으면 결과로 Null이 반환된다.
문법: SELECT SUM(<컬럼, 표현식>) FROM <테이블>
예) 워싱턴에 근무하는 직원들의 급여의 총 합을 알고싶다.
SELECT SUM(Salary) FROM employess WHERE EmpState='WA';
● AVG
AVG 함수는 결과 셋에 들어있는 Null이 아닌 모든 원소들의 평균(average)을 계산해서 반환한다. 만약 결과 셋의 모든 원소들의 값이 Null 이거나 결과 셋이 비어 있으면 AVG함수는 Null을 반환한다.
문법: SELECT AVG(<컬럼, 표현식>) FROM <테이블>
예) ID가 10023인 생산자(vendor)와의 평균 계약 금액을 알고 싶다.
SELECT AVG(ContractPrice) FROM Emgagements WHERE VendorID=10023;
● MAX, MIN
결과 셋에서 가장 큰 값을 가진 원소를 찾는다. MAX 함수는 그 대상이 문자, 문자열, 시간 등인 경우에도 연산이 가능하다. 대상이 문자열 등인 경우에는 사용하는 DBMS의 문자열 배열 순서(collating sequence)에 따라 결과 값이 정해진다.
문법: SELECT MAX(컬럼) FROM <테이블>
예) 최고가 계약 금액을 알고 싶다.
SELECT MAX(ContractPrice) FROM Engagements;
MIN 함수는 결과 셋에서 가장 작은 값을 가진 원소를 반환한다.
예) 가장 싼 상품의 가격은 얼마인가?
SELECT MIN(price) FROM products;
● 하나의 검색식 안에서 여러 개의 합연산(aggregation) 함수 사용하기
예) 홍보 부서(advertising department)에 근무하는 직원들의 가장 오래된(earliest) 리뷰와 가장 최근(most recent) 리뷰의 게시 날짜를 알고 싶다.
SELECT MIN(ReviewDate), Max(ReviewDate) FROM employee_reviews WHERE EmpDepartment='Advertising';
● 검색 조건 구문에서 합 연산 사용하기
합 연산 함수들은 하나의 값을 연산 결과로 반환한다. 따라서 스칼라 서브쿼리로 합 연산 구문을 사용할 수 있다.
예) 제품들의 평균 가격보다 비싼 제품들을 알고 싶다.
SELECT ProductName FROM products WHERE Price > (SELECT AVG(Price) FROM products);
예) 전체 플레이어들의 평균 점수보다 평균 점수가 높은 플레이어들을 알고 싶다.
SELECT CONCAT(bowlers.BowlerFirstName, ' ', bowlers.BowlerLastName) AS bowlerName
FROM bowlers
WHERE (SELECT AVG(RawScore) FROM bowler_scores WHERE bowler_scores.BowlerID=bowlers.BowlerID) > (SELECT AVG(RawScore) FROM bowler_scores);
■
'데이터 모델과 SQL' 카테고리의 다른 글
[데이터 모델과 SQL] 14. 관심 그룹(HAVING) - 2/2 (0) | 2023.02.02 |
---|---|
[데이터 모델과 SQL] 14. 관심 그룹(HAVING) - 1/2 (2) | 2023.02.01 |
[데이터 모델과 SQL] 12. Grouping data (0) | 2023.01.16 |
[데이터 모델과 SQL] 11. 서브쿼리Subquery - 2/2 (0) | 2023.01.16 |
[데이터 모델과 SQL] 10. 서브쿼리Subquery - 1/2 (0) | 2023.01.16 |
댓글