2024. 8. 14. 16:24ㆍLanguage/SQL
데이터를 다루다 보면 특정 속성의 합계, 평균, 개수, 최소, 최대 등에 대한 계산이 필요로 하는 경우가 많을 것이다. 이번에는 계산에 관한 내용을 알아보자.
1. 기본 문법
'SELECT, FROM' 구문을 사용하므로 기본 문법은 해당 게시글을 참고하도록 하자.
2. 사용 예시
2-1. ' + ', ' - ', ' / ', ' * '
'food_orders' 테이블의 'food_preparation_time(조리 시간)' 과 'delivery_time(배송 시간)' 을 조회해 고객이 음식을 배달 받기까지 걸린 'time_taken(소요 시간)' 을 구해 출력해보자.
SELECT food_preparation_time, delivery_time,
food_preparation_time + delivery_time as time_takenm // 속성 값을 더한 결과를 갖는 속성
FROM food_orders
사칙연산(+, -, /, *)을 통해 속성 값을 연산할 수 있다. 연산 결과에 별명은 붙여 출력 결과로 확인할 수 있다. Java 에선 '1 + 3 = i' 이면 ' i ' 가 변수이지만 여기서는 따로 결과를 저장하는 것이 아니라 결과에 별명을 붙이는 것 같다.
2-2. SUM, AVG
'customers' 테이블에서 모든 고객들의 나이(age) 합계와 평균을 구해보자
SELECT SUM(age) as total_age, // age 합계
AVG(age) avg_age // age 평균
FROM customers
'SUM(컬럼명) as 별명' 및 'AVG(컬럼명) as 별명' 방식으로 작성한다(as 는 생략 가능). 함수(SUM, AVG)를 통해 결과를 도출하고 별명을 붙여 결과가 출력된다.
2-3. COUNT
'customers' 테이블 속한 고객의 수와 'gender' 가 가지는 값의 가짓수를 출력해 보자.
SELECT COUNT(1) customer_count,
COUNT(DISTINCT gender) gender_kind_count
FROM customers
'COUNT(컬럼명) as 별명' 의 방식을 사용하면 해당 테이블의 레코드(열, 튜플)의 개수를 계산할 수 있다. 컬럼명 대신 ' 1 ' 또는 ' * ' 를 사용할 수 있는데 이는 어떤 컬럼을 선택해도 레코드의 개수는 동일하기에 컬럼명이 아닌 다른 방식으로 지정하기 위해 있는 표현같다(나는 아무래도 익숙한 ' * ' 를 많이 사용할 것 같다).
※ 참고 : 컬럼명 지정시 NULL 값을 제외하고 연산을 수행한다. 그리고 ' 1 ' or ' * ' 을 사용한다면 NULL 값을 포함한 연산을 수행하니 이점 반드시 기억하도록 하자! (물론 ' ! ' or ' * ' 를 사용하고 WHERE 문에서 'IS NOT NULL' 을 사용해 NULL 값을 제외해도 된다)
'COUNT(DISTINCT 컬럼명) as 별명' 방식을 사용하면 지정한 컬럼이 갖는 값의 가짓수를 계산할 수 있다. 예시에서는 고객의 성별에 대해 쿼리를 날리니 2가지(male, female) 종류의 값을 가진다는 결과가 출력된 것을 확인 할 수 있다.
2-4. MIN, MAX
'customers' 테이블에서 고객의 나이 중 가장 어린 나이와 가장 많은 나이를 출력해보자.
SELECT MIN(age) min_age,
MAX(age) max_age
FROM customers
'MIN(컬럼명) 별명', 'MAX(컬럼명) 별명' 방식으로 작성하며, 각각 지정한 컬럼의 가장 작은 값과 가장 큰 값을 찾아 출력한다.
'Language > SQL' 카테고리의 다른 글
[SQL] 카테고리별 필터링 - HAVING (0) | 2024.08.14 |
---|---|
[SQL] 데이터 정렬 - ORDER BY (0) | 2024.08.14 |
[SQL] 카테고리별 연산 - GROUP BY (0) | 2024.08.14 |
[SQL] 데이터 필터링 - WHERE (0) | 2024.08.13 |
[SQL] 데이터 조회 - SELECT, FROM (0) | 2024.08.13 |