오늘은 SQL로 데이터를 더 유용하게 다루는 방법을 실습해봤다. 단순히 조회하는 데서 그치지 않고, WHERE 절을 이용해 조건에 맞는 데이터를 뽑아내고, GROUP BY로 범주별 연산을 수행한 뒤, ORDER BY로 결과를 정렬하는 방법을 실습하며 SQL의 기본기를 한층 더 확장할 수 있었다.
WHERE 절로 원하는 데이터 뽑고, 계산해보기
단순히 데이터를 조회하는 것에서 한 발 더 나아가, 조건을 주고 계산까지 해 볼 수 있다. 앞서 배운 구문과 함수를 활용해 원하는 데이터를 뽑아내는 과정을 실습해 보았다.
Query를 적기 전에 흐름을 정리해보기
쿼리를 작성하기 전에 흐름을 먼저 생각해두면 훨씬 수월하다.
1) 어떤 테이블에서 데이터를 뽑을 것인가?
2) 어떤 컬럼을 이용할 것인가?
3) 어떤 조건을 지정해야 하는가?
4) 어떤 함수(수식)을 이용해야 하는가?
위 네가지 질문에 맞춰 차근차근 구문을 만들고, 전체 구조로 합치면 쿼리를 완성할 수 있다.
[실습 1] 주문 금액이 30,000 원 이상인 주문건의 갯수 구하기
select cnt(*) as cnt_order
from food_orders
where price>=30000
[실습 2] 한국 음식의 주문 당 평균 음식가격 구하기
select avg(price) as average_price
from food_orders
where cuisine_type='Korean'
범주별 연산하기 (GROUP BY)
조건만으로는 부족할 때, 카테고리 단위로 묶어서 계산하고 싶을 때가 있다. 이럴 때 사용하는 게 GROUP BY다.
GROUP BY 기본 구조
select 카테고리컬럼,
sum(계산컬럼)
from 테이블
group by 카테고리컬럼
GROUP BY는 카테고리 칼럼 지정, 그리고 GROUP BY를 적어주는 것으로 적용 가능하다.
[실습 1] 음식 종류별 총 주문 금액 구하기
select cuisine_type,
sum(price) sum_of_price
from food_orders
group by cuisine_type
실행하면 음식 종류별 총 주문 금액이 아래와 같이 나온다:

[실습 2] 음식점별 주문 금액 최댓값 조회하기
select restaurant_name, max(price) max_price
from food_orders
group by restaurant_name

[실습 3] 결제 타입별 가장 최근 결제일 조회하기
select pay_type, max(date) as recent_date
from payments
group by pay_type

Query 결과를 정렬하기 (ORDER BY)
데이터를 정제하고 가공하는 과정에서는 단순히 조회만 하는 것으로는 부족할 때가 많다. 예를 들어 주문 금액이 큰 순서대로 보고 싶거나, 고객 이름 순으로 깔끔하게 정렬해서 확인하고 싶을 때가 그렇다. 이런 상황에서 사용할 수 있는 것이 바로 ORDER BY 구문이다.
ORDER BY는 SQL로 조회한 결과를 원하는 순서대로 정렬해 주는데, 쿼리 결과는 데이터가 추가되거나 삭제되면서 항상 같은 순서로 출력되지 않으므로, 필요한 상황에서는 반드시 정렬 기준을 명시해줘야 한다. 기본값은 오름차순(ASC)이며, 내림차순이 필요할 때는 DESC 옵션을 붙이면 된다.
ORDER BY 기본 구조
select 카테고리컬럼,
sum(계산 컬럼),
from 테이블명
group by 카테고리컬럼
order by 정렬을 원하는 컬럼 /*내림차순 정렬시 'DESC' 옵션 추가*/
정렬 기준이로는 카테고리컬럼이나 집계된 계산컬럼 모두 지정할 수 있다.
[실습 1] 음식 종류별 주문 금액 합계를 '주문 금액 합계' 기준으로 오름차순 정렬하기
select cuisine_type,
sum(price) sum_of_price
from food_orders
group by cuisine_type
order by sum(price)
실행하면 음식 종류별 주문 금액 합계가 오름차순으로 정렬되어 나온다:

[실습 2] 음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬
select restaurant_name, max(price) as max_price
from food_orders
group by restaurant_name
order by max_price desc

[실습 3] 고객을 이름 순으로 오름차순으로 정렬하기
select *
from customers
order by name

추가 팁
- ORDER BY 절에서는 두 가지 이상의 컬럼으로 정렬할 수도 있다.
- 쉼표(,)로 연결하면 되고, 앞에 적은 컬럼부터 우선순위가 적용된다.
select cuisin_type,
sum(price) as sum_of_price
from food_orders
group by cuisine_type
order by cuisine_type, sum_of_price desc;
실행하면 음식 종류별로 먼저 정렬된 뒤, 같은 종류 안에서는 주문 금액 함계를 내림차순으로 정렬된다.

마무리
이번 실습을 통해 SQL이 단순히 데이터를 불러오는 도구가 아니라, 원하는 조건을 걸어 의미 있는 데이터를 추출하고, 범주별로 묶어 요약하며, 정렬까지 해서 바로 활용할 수 있는 강력한 도구라는 걸 알게 되었다. WHERE 절과 ORDER BY만 잘 익혀도 데이터를 한층 더 자유롭게 다룰 수 있었고, GROUP BY를 활용해 음식 종류별, 고객별 같은 카테고리 단위로 결과를 요약해보니 SQL이 제공하는 분석 기능히 좀 더 넓게 느껴졌다. 실습 과정에서 조건, 그룹, 정렬을 달리할 때마다 결과가 달라지는 모습을 보며 SQL 문법이 실제 분석과 업무에 얼마나 직관적으로 연결되는지 조금이나마 체감할 수 있었다. 앞으로는 배운 구문과 함수들을 조합해 더 복잡한 상활에도 적용할 수 있도록 연습을 이어가야겠다.
'Data_10기' 카테고리의 다른 글
| SQL 실습 - 새로운 카테고리 만들기 (0) | 2025.09.29 |
|---|---|
| SQL 문자열 가공과 조건문 활용하기 - REPLACE, SUBSTR, CONCAT, IF, CASE (0) | 2025.09.26 |
| SQL 기초 문법 정리 - 조건문과 집계 함수 (0) | 2025.09.24 |
| SQL 기초 문법 정리 - SELECT, FROM, WHERE (1) | 2025.09.23 |
| SQL 데이터 조회하기 - 테이블과 컬럼 (0) | 2025.09.22 |