[SQL] 2. 엑셀함수, Group by, Order by

김죠·2023년 12월 21일
0
post-thumbnail

숫자 및 연산 기호

연산자설명
+더하기
-빼기
*곱하기
/나누기

테이블의 각 속성끼리의 사칙연산을 통해 새로운 파생변수를 생성할 수 있다.
예를 들어 음식 주문 정보 데이터에서 음식 준비 시간과 배달 시간이 주어졌을 때, 두 시간을 더하여 걸린 총 시간을 구할 수 있다.

select food_preparation_time , delivery_time , food_preparation_time + delivery_time as total_time
from food_orders

엑셀 함수(SUM, AVG, COUNT, MIN, MAX)

sql에서도 마찬가지로 엑셀 관련 문제를 구현할 수 있다. 원하는 함수 안에 데이터의 컬럼명을 적으면 된다

예제

1. 음식 준비시간의 총 합과 배달시간 평균 구하기(SUM, AVG)

select sum(food_preparation_time) total_food_preparation_time,
	   avg(delivery_time) avg_delivery_time
from food_orders

2. 전체 주문 수와 고객 수 구하기(COUNT)

한 고객이 여러번 주문을 할 수 있어 주문 정보에 고객의 중복이 발생할 수 있다.
이때 고객의 수만 세고 싶을땐 중복을 제거한다는 의미의 distinct를 사용한다

select count(1) count_of_orders, count(distinct customer_id) count_of_customers
from food_orders

3. 음식 주문 가격의 최소값, 최대값 구하기(MIN, MAX)

select min(price) min_price, max(price) max_price
from food_orders

4. 한국 음식을 주문한 주문 정보의 평균 가격 구하기

SELECT avg(price) as avg_price
from food_orders
where cuisine_type = 'Korean'

5. 30000원 이상 주문 정보 개수 구하기

select count(*) cnt_orders
from food_orders
where price>=30000

Group by

종류별로 그룹화하기 위해 where절을 사용해서 수십개의 쿼리를 작성하는 비효율을 막기 위해 Group by를 사용한다. 예를 들어 음식 주문 정보라고 했을 때, 음식 종류별로 평균/총 가격을 알고 싶을 때 group by를 사용하여 각 음식 종류별 가격을 구할 수 있다.

기본 구조

select 카테고리컬럼(원하는컬럼 아무거나),
       sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)

1. 음식점별 주문 금액 최대값 조회하기

select cuisine_type, max(price)
from food_orders
group by cuisine_type

2. 결제 타입별 가장 최근 결제일 조회하기

select pay_type, max(date) recent_date
from payments
group by pay_type

Order by

위의 쿼리문을 이용해 결과를 도출했을 때, 결과가 뒤죽박죽 나올 때가 있다.
이때 쿼리문의 결과를 Order by를 이용해 특정 컬럼을 기준으로 오름차순/내림차순으로 정렬할 수 있다.

기본구조

select 카테고리컬럼(원하는컬럼 아무거나),
       sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
order by 정렬을 원하는 컬럼 (카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼) 둘 다 가능)
종류구문예시
오름차순생략order by sum(price)
내림차순descorder by sum(price) desc

1. 음식점별 주문 금액 최대값을 최대값 기준으로 내림차순 정렬

select restaurant_name,
	max(price) as max_price
from food_orders fo
group by restaurant_name
order by max_price desc

2. 음식점별 주문 금액 합을 금액 합 기준으로 오름차순 정렬

select cuisine_type,
       sum(price) sum_of_price
from food_orders
group by cuisine_type
order by sum(price)

3. 고객 정보를 성별 기준으로 오름차순, 성별이 같으면 이름 기준으로 오름차순

order by를 이용하면 하나의 컬럼만을 기준으로 하는 것이 아니라 여러 컬럼을 기준으로 오름차순이 가능하다

select *
from customers
order by gender, name

숙제

음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기

가장 높은 주문금액과 낮은 주문금액을 구해야 하므로 max(price), min(price)를 사용하고,
가장 낮은 주문금액 순으로 내림차순하므로 order by min(price) desc를 사용한다.
음식 종류별로 최대, 최소를 구해야 하므로 group by cuisine_type를 사용한다

SELECT cuisine_type, max(price) as max_price, min(price) as min_price 
FROM food_orders
group by cuisine_type
order by min_price desc

profile
1=850

0개의 댓글