강의/프로그래밍 기초

[ 프로그래밍 기초 ] SQL | 집계함수, 그룹화, 정렬

da-hong 2025. 6. 17. 22:24

1. 집계 함수

  • 기본 연산
    • 합계 : SUM(컬럼)
    • 평균 : AVG(컬럼)
select sum(food_preparation_time) total_food_preparation_time,  # 상품 준비 시간 합계 
       avg(delivery_time) avg_food_delivery_time  # 배달 시간 평균
from food_orders
  • 데이터 개수
    • 전체 데이터 개수 : COUNT(컬럼) or COUNT(1) 
    • 몇 개의 값을 가지고 있는지 구할 때(중복 x) : DISTINCT
select count(1) count_of_orders,  # 전체 주문 건수 
       count(distinct customer_id) count_of_customers  # 주문한 고객 수 
from food_orders
  • 데이터 범위 
    • 최솟값 : MIN(컬럼)
    • 최댓값 : MAX(컬럼)
select min(price) min_price,  # 주문 가격의 최소값
       max(price) max_price  # 주문 가격의 최댓값
from food_orders

 

 

2. 범주별로 그룹화하기

  • GROUP BY: 특정 컬럼을 기준으로 데이터를 그룹화하여 요약 정보(합계, 평균, 개수 등)를 도출 
    • WHERE 다음, ORDER BY 앞에 위치
    • 여러 컬럼을 GROUP BY 에 넣으면 지정한 모든 컬럼의 조합을 기준으로 그룹화됨
# 지불방식 & 부가가치세(0.2이상)별 가장 최근 결제일 조회

select pay_type, vat,  # 카테고리 컬럼
	   max(date)  # 집계 함수
from payments
where vat >= 0.2
group by pay_type, vat  # 지불방식과 부가가치세 조합으로 그룹화

 

 

3. 그룹 단위로 조건 걸기 

  • HAVING: GROUP BY로 묶인 그룹에 대해 조건을 걸 때 사용
    • COUNT(), SUM() 같은 집계 함수 결과를 필터링  ( ↔️ WHERE절은 집계 함수 사용할 수 없음 ) 
    • GROUP BY 다음 위치 

 

4. 정렬하기

  • ORDER BY: 하나 이상의 컬럼 또는 계산 결과를 기준으로 정렬
    • ASC: 오름차순 정렬 (기본값) /  DESC: 내림차순 정렬
    • SELECT 문 마지막에 위치
    • 여러 컬럼을 GROUP BY 에 넣으면 지정한 컬럼들이 순차적으로 정렬됨 
# 음식점별 주문 금액 최댓값 조회하기 

select restaurant_name,
       max(price) "최대 주문금액"
from food_orders
group by restaurant_name
order by max(price) desc  # 최댓값 기준으로 내림차순 정렬

 

 

📌 SQL 기본 구조 

순서 기억하기!

#코드 순서   #실행 순서
select     #5: 출력할 열 계산
from       #1: 테이블 선택
where      #2: 개별 행 필터링
group by   #3: 남은 행을 그룹화    
having     #4: 그룹 단위로 조건 적용
order by   #6: 결과 정렬

 


 

📝 숙제

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

select cuisine_type,
	max(price) max_price, 
        min(price) min_price
from food_orders
group by cuisine_type 
order by min(price) desc

결과 데이터