IT_SQL

[분석 기초] SQL 데이터 정렬. 데이터 탐색하기 (ORDER BY. 내림차순, 오름차순!)

soyounism 2021. 10. 21. 23:29

안녕하세요.

지난 포스팅에서 SQL의 조건절

HAVING, WHERE 조건절의 사용과 차이점까지 진행되었습니다

전체 데이터를 조건화, 그룹화하여

원하는 데이터를 추출 할 수 있아주 유용한 쿼리입니다.

실무를 할 때 데이터를 탐색하여 데이터 인사이트의

기초가 될 수 있는 유용한 쿼리라고 볼 수 있어요.

 

오늘 포스팅 할 쿼리들은 SQL에서 정말 유용하게 쓰이는 '정렬'입니다

SQL에서 보기 쉽게 정렬하는 기능, 문법은 어떤것들이 있을까요?

실무 데이터 분석을 하신다면 꼼꼼히 봐주세요

 

 

ORDER BY 정렬

 

 

지난 포스팅에 이어서 진행하겠습니다

(지난 포스팅) https://s-s-o-story.tistory.com/20

 

[분석 기초] SQL 쿼리 조건절, 그룹화로 특정 데이터 추출하기 (조건절 having vs where 차이!)

지난 포스팅에서 SQL 집계함수 [group by] 까지 진행되었습니다 전체 데이터의 합계(sum), 최소값(min), 최대값(max), 평균값(avg) 등의 집계 정보를 추출할 수 있는 아주 유용한 쿼리입니다. 실무를 하다

s-s-o-story.tistory.com

지난시간 WHERE, HAVING 조건절을 사용하면서, 해당 조건을 설정하고, 그에 맞는 데이터를 추출해보았습니다

 

 

이번 포스팅은 여기에 추가적으로 함께 쓸 수 있는 유용한 정렬 쿼리를 진행할게요

 

10. 정렬 ORDER BY

* 혹~시 잊어버릴 수 있으니, 기존 전체데이터를 잠시 보겠습니다

select *
from sql_ssostory_1 ss

 

 

10-1. 업종별(category 칼럼)으로 정렬하기

order by 절를 사용합니다

order by category 쿼리를 추가하면, 카테고리별로 정렬이되죠.

select *
from sql_ssostory_1 ss 
order by category

- category 컬럼은 한글값들이기 때문에, 가나다 순으로 정렬이 되었죠

 

 

10-2. 업종별, 점포수, 종사자수로 정렬하기 (order by 다중 정렬)

정렬기준은 하나 이상 다양하게 가능합니다. 

order by category, store_num, employee_num  쿼리는,

카테고리별->점포수->종사자수 순으로 정렬이 됩니다

select *
from sql_ssostory_1 ss 
order by category, store_num, employee_num

 

 

10-3. 매출액이 높은순서로 정렬하기

- 먼저, 복습할 겸 카테고리별로 매출액 합계를 구해볼게요

select category , sum(sales)
from sql_ssostory_1 ss 
group by 1

 

* 유의! -> 이 코드는 실행이 되지 않습니다

select category , sum(sales) as sales_sum
from sql_ssostory_1 ss 
group by 1
order by sales

 

왜냐하면, selct 절을 봐주세요. 지금 출력되는 것은 category, sales_sum 컬럼 밖에 없어요.

 

 

이제 매출액 별로 정렬해보겠습니다

order by sales_sum 쿼리를 추가하면됩니다

select category , sum(sales) sales_sum
from sql_ssostory_1 ss 
group by 1
order by sales_sum

결과가 나왔습니다. 그런데 오름차순이네요? 매출액(sales_sum)이 높은 순서대로 보고싶은데...

 

 

10-4. 내림차순으로 정렬하기 desc

order by 절에서 내림차순 하고싶은 컬럼명 옆에 desc 를 추가해줍니다

select category , sum(sales) 
from sql_ssostory_1 ss 
group by 1
order by sum desc

매출액 합계 칼럼을 기준으로 내림차순 정렬되었습니다

한식 음식업종이 전체 매출액이 가장 높네요!

 

 

10-5. 정렬 심화. 내림차순 오름차순 혼합 사용

매출액은 높은것부터 나왔으면 좋겠고, 종사자수, 영업비용,는 적은것부터 나왔으면 좋겠어...(욕심...)

그러면 순서대로 매출액 합계 sum(sales)는 desc. 즉 내림차순으로,

나머지 종사자수(employee_num), 영업비용(cost)는 기본값 오름차순으로 정렬하면 되겠죠

* 참고 : order by도 group by처럼 컬럼명을 직접 써도 되고, 컬럼 순서 숫자로 입력해도 됩니다

select category, fanchise, employee_num ,"cost", sum(sales) as sales_sum
from sql_ssostory_1 ss 
group by 1,2,3,4
order by 5 desc, 3 , 4

* 참고로 우리가 분석하고 있는 데이터에서는 'cost'라는 컬럼명이 존재하는데,

SQL의 cost는 또다른 문법을 가진 명령어네요. 그래서 cost컬럼을 쓸 때 따옴표로 감싸주어야 실행이 됩니다

(의미가? SQL문의 Cost는 실행계획 같은 도구에 의해 만들어진 수치와 SQL이 수행될때 실제 소비되는 자원을 의미한다. 참고 자료 : http://wiki.gurubee.net/pages/viewpage.action?pageId=1966887)

 

 

유의) select 절에 없는 컬럼으로도 정렬할 수 있을까? -> 불가능!

select fanchise, sum(sales)
from sql_ssostory_1 ss 
group by 1
order by category

이 코드는 실행되지 않습니다.

생각해보면, select절에 있는 것들만 출력이 되죠. 그런데 없는 걸 정렬해서 어떻게 볼 수 있을까요... 불가능!

 


이제 SQL 실무에서 사용하기는 거의 다 끝나가네요

 

여기까지 차근차근 따라 오셨다면, 이전에 포스팅 했듯이

이제 배우지 않은 쿼리들도 대략 이해하실 수 있을 겁니다 

SQL쿼리는 굉장히 직관적이라, 몇번 따라해보면 크게 어렵게 생각하실 필요가 없어요.

 

이제 남은 몇가지 중요한 파트들도 열심히 진행해볼게요

실무에서 데이터분석하기! 빠르게 진행해볼게요~

 

데이터 분석 실무 초고속 정복하기!

더 좋은 꿀팁들을 알고 계시면 공유해주세요!^^