[2일차] SQL 연산하기(SUM, AVG, COUNT, MAX, min, GROUP BY, ORDER BY)

jay bong·2024년 4월 16일

SQL

목록 보기
2/9
post-thumbnail

지난번에 SQL의 기본적인 구조와 데이터베이스를 조회해 보았다면, 이번에는 데이터들을 연산하여 다른 결과들을 만들어보고자 한다.

  • SQL로 계산하기

SQL을 통해 다양한 계산기호들을 이용할 수 있다. 숫자 연산의 종류는 다음과 같다.

  1. 숫자 연산
연산자설명
+더하기
-빼기
*곱하기
/나누기
  1. 기본 연산
연산자설명
SUM합계
AVG평균
COUNT개수
MAX최댓값
MIN최솟값

기본 연산의 경우 연산자 뒤에 칼럼을 적어서 활용할 수 있다.

SUM(칼럼), AVG(칼럼), MAX(칼럼), MIN(칼럼)

COUNT도 동일하게 칼럼에 해당하는 개수를 파악할 때 사용할 수 있지만, 다음과 같이 전체의 개수를 파악할 수도 있다.

COUNT(1), COUNT(*)

중복된 값을 제외한 개수를 파악하고 싶다면 아래와 같이 사용할 수도 있다.

COUNT(distinct 칼럼)

  • group별로 묶기

전체의 칼럼의 값이 아닌 칼럼내에서도 그룹을 나눠서 계산해야하는 상황도 발생하기 마련이다. 이럴때 사용하는 구조가 group by이다.

예를 들어 어느 한 지역의 가게들의 매출 데이터를 가지고 있다고 가정해보자. 한식, 중식, 일식 별로 구분해서 매출의 평균이나 총합을 비교하기 위해서는 해당 구조를 사용하면 편리할 것이다.

기본적인 구조는 다음과 같다.

select 카테고리컬럼
from 테이블
group by 카테고리컬럼

[실습1] 음식점별 주문 금액 최댓값 조회

select restaurant_name, 			-- restaurant_name 칼럼 가져오기
       max(price) "최대 주문금액"  	-- price 칼럼의 최댓값을 찾은 후 별명 설정
from food_orders 					-- food_orders 테이블에서
group by restaurant_name			-- restaurant_name칼럼에서 같은 이름끼리 분류

[결과]

  • 데이터 정렬하기

위와 같은 결과를 확인 한 후, 오름차순으로 정렬하거나 내림차순으로 정렬하고자 한다면 order by를 사용한다.
기본적인 구조는 다음과 같다.

select 카테고리컬럼
from 테이블
group by 카테고리컬럼
order by 1차 정렬을 원하는 컬럼, 2차 정렬을 원하는 칼럼,..., n차 정렬을 원하는 칼럼

기본적으로는 오름차순으로 정렬을 진행하고 만약 내림차순 정렬을 원한다면 아래와 같이 desc를 추가 작성한다.

select 카테고리컬럼
from 테이블
group by 카테고리컬럼
order by 정렬을 원하는 컬럼 desc

실습1의 결과르 각각 오름차순과 내림차순으로 정렬하면 다음과 같다.

[실습2] 실습1 최대주문 금액 오름차순 정렬

select restaurant_name, 			-- restaurant_name 칼럼 가져오기
       max(price) "최대 주문금액"  	-- price 칼럼의 최댓값을 찾은 후 별명 설정
from food_orders 					-- food_orders 테이블에서
group by restaurant_name			-- restaurant_name칼럼에서 같은 이름끼리 분류
order by max(price)					-- 최대 주문금액 오름차순으로 정렬

[결과]

[실습3] 실습1 최대주문 금액 내림차순 정렬

select restaurant_name, 			-- restaurant_name 칼럼 가져오기
       max(price) "최대 주문금액"  	-- price 칼럼의 최댓값을 찾은 후 별명 설정
from food_orders 					-- food_orders 테이블에서
group by restaurant_name			-- restaurant_name칼럼에서 같은 이름끼리 분류
order by max(price)	desc		    -- 최대 주문금액 내림차순으로 정렬

[결과]


  • 2일차 학습 중 자주 놓치는 포인트

    • group by를 사용하지 않았을때,
      count(1)이나 count(*)을 사용하여 개수를 확인하거나, max,min등을 통해 어떠한 값을 확인한다면 선택한 칼럼에서의 값만 파악하여 결과가 출력될 것이다.

      그렇기 때문에 우리가 칼럼에 해당하는 총 개수가 궁금한 것인지, 칼럼내의 카테고리마다 해당하는 개수가 궁금한것인지를 잘 파악하고 상황에 맞게 사용해야 한다.

profile
Fly High

0개의 댓글