SQL

[내일배움캠프] SQL 기초 - MIN, MAX, SUM, AVG, COUNT, GROUP BY, ORDER BY

응애 PM 2025. 3. 12. 15:26

저번에 이어서 SQL의 기초 문법들을 더 뜯어보자.

 

- MIN, MAX, SUM, AVG, COUNT 내장 함수

 

· 주문 금액이 30,000원 이상인 주문건의 갯수 구하기

SELECT COUNT(*) # COUNT(1) 도 상관 X
FROM food_orders
WHERE price >= 30000;

 

COUNT 함수를 통해서 행의 개수(주문건의 갯수)를 구했다.

 

이때 COUNT(1), COUNT(2) ... 도 상관 없는데 COUNT 뒤의 숫자는 열의 인덱스를 의미하니까 뭘 써도 상관이 없다.

 

 

· 한국 음식의 주문 당 평균 음식가격 구하기

SELECT ROUND(AVG(price)) as average_price
FROM food_orders
WHERE cuisine_type = 'Korean';

 

열의 이름이 안 이뻐서 as를 통해 변환시켜줬다.

 

열 내의 값의 평균을 구하기 위해선 위와 같이 AVG(열의 이름) 내장 함수를 이용할 수 있다.

 

그리고 ROUND() 함수로 한 번 더 감싸줬는데, 평균 값이 소수점으로 안 이쁘게 나왔었따..

 

ROUND() 함수를 이용하면 반올림해서 정수값만 나오게 할 수 있다.

 

 

· MIN, MAX, SUM 한 번에 몰아보기

SELECT MIN(food_preparation_time), 
       MAX(delivery_time), 
       SUM(food_preparation_time + delivery_time) as total_time
FROM food_orders;

 

실행 결과 화면.

 

앞에서 AVG나 COUNT 함수를 쓴 것과 비슷하게,

 

MIN, MAX, SUM를 활용하여 최솟값, 최댓값, 총합 들을 구할 수 있다.

 

이때 괄호 안에서 열 간의 연산도 가능하다.


- GROUP BY, ORDER BY

· 음식점별 주문 금액 최댓값 조회하기

 

'음식점' 을 기준으로 주문 금액의 최댓값을 조회해야 하므로, 이때 GROUP BY 절을 활용해야 한다.

SELECT restaurant_name,
       MAX(price) as max_price
FROM food_orders
GROUP BY restaurant_name;

음식점 별 금액 최댓값이 잘 출력됐다.

 

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

 

이번엔 '결제 타입'을 기준으로 가장 최근 결제일을 조회해야한다. 마찬가지로 GROUP BY 절 활용

SELECT pay_type,
	   max(date) recent_date
FROM payments
GROUP BY pay_type;

결제 타입이 두 가지 뿐이라 행이 두 개인 모습.

 

이때 date도 비교연산이 가능했으니까, ORDER BY를 활용하여 오름차순 / 내림차순으로 정렬할 수 있다.

 

기본적으로 오름차순으로 정렬이 되니까, 내림차순 정렬이 되는지 확인해보자..

 

SELECT pay_type,
	   max(date) recent_date
FROM payments
GROUP BY pay_type
ORDER BY recent_date DESC;

내림차순 정렬이 잘 됐다.

 

ORDER BY 관련 몇가지 예제를 더 확인해보자.

 

 

· 음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬

SELECT restaurant_name,
       MAX(price) max_price
FROM food_orders
GROUP BY restaurant_name
ORDER BY max_price DESC;

 

앞 예제와 마찬가지로 정렬의 기준이 되는 열 하나를 선택하고, 오름차 / 내림차 정렬을 선택해서 적어주면 된다.

 

· 고객을 성별, 이름 순으로 오름차순으로 정렬하기

SELECT *
FROM customers
ORDER BY gender, name ASC;

gender 열을 먼저 기준으로 정렬하고, 이후 name을 기준으로 정렬되는 모습.

 

성별, 이름 순으로 기준을 잡는다면 ORDER BY 뒤에 먼저 적은 열 순서 대로 정렬되는 모습을 확인할 수 있다.

 


- 예제 풀기

 

products 테이블 예시.

 

· 테이블에서 제품 이름(product_name)과 가격(price)만을 선택하는 쿼리를 작성

SELECT product_name, price
FROM products;

 

· 테이블에서 제품 이름에 '프로'가 포함된 모든 제품을 선택하는 쿼리를 작성

SELECT *
FROM products
WHERE product_name LIKE '%프로%';

 

· 테이블에서 제품 이름이 '갤'로 시작하는 모든 제품을 선택하는 쿼리를 작성

SELECT *
FROM products
WHERE product_name LIKE '갤%';

 

· 테이블에서 모든 제품을 구매하기 위해 필요한 돈을 계산하는 쿼리를 작성

SELECT MAX(price) as total_price
FROM products;

 

 

 

확인해보니 오늘 공부한 내용은 예제에 많이 들어가있지 않았지만... 😅

 

그래도 GROUP BY, ORDER BY 까지 왔으면 SQL의 기초적인 구조는 어느정도 알았다고 할 수 있다~