데이터 공부/데이터베이스 & SQL

04. SQL- Group By와 Order By (A.K.A 2주차 수업 정리)

한소희DE 2021. 6. 14. 10:12

안녕하세요 한소희입니다. 공부를 통해 배운 내용을 작성하고 있습니다. 혹여 해당 포스팅에서 잘못된 부분이 있을 경우, 알려주시면 빠르게 수정 조치하도록 하겠습니다. 감사합니다.

 

 

 

목차

Group By란

Order By란

Group By와 Order By - 타 문법과의 활용

과제 풀이


 

 

01. Group By란

 

Group By란, 기준 속성으로 묶는 것을 말한다. 


아래 코드 예시를 보면 더욱 이해가 잘 된다. 아래 코드 설명은 아래와 같다.

users 테이블에서 'name' 속성으로 group by(=이름별로 묶음) 뒤, 각각의 개수를 세어보자.

# 1. users에서 2. group by한 뒤, 3. select
select name, count(*) from users
group by name

 

 

❓❗ 그럼 만약, 특정 이름을 가진 사람의 수를 세고 싶은 경우는 어떻게 할까?

 

여기서 group by를 써야 한다고 생각할 수 있다. 예를 들어, 이름이 '신**'라면, 이름이 신**인 사람들의 수를 모두 group by 하여, 조건을 걸어줄 수 있겠다. 하지만 이는 복잡하다. 모든쿼리를 가져와 집계하고 그중에 일부를 뽑는 것이기 때문이다.

따라서 효율적인 SQL문 수립을 위해, 이럴 땐 group by를 쓰지 않는 것이 좋다.

# 정답. 그룹을 묶을 필요가 없이, 신씨인 사람들만 출력해 count하면 됨
select name, count(*) from users
where name='신**'

 

 

 

1-1. Group By를 통한 연산

 

연산 방법은, 코딩을 어느정도 할 줄 아는 사람들이라면 아래 예시를 보고 바로 이해할 수 있을 것이다.

문법 예시들은 아래와 같다.

 

# 주차 별 오늘의 다짐 구하기
# limit 10
select week, count(*) from checkins 
group by week

# 오늘의 다짐 like 최소값 구하기
select week, min(likes) from checkins
group by week 

# 오늘의 다짐 like 최대값 구하기
select week, max(likes) from checkins
group by week

# 오늘의 다짐 like 평균값 구하기 + 반올림
select week, round(avg(likes)) from checkins
group by week

# 오늘의 다짐 like 합 구하기 + 반올림
select week, sum(likes) from checkins
group by week

 

🔥 여기서 select 앞에, 집계 대상 속성명을 써주는 이유?
없어도 집계는 가능하지만, 집계 결과가 무엇을 뜻하는지 알려면 select에 집계 대상 속성명을 써주어야 한다.

 


 

02. Order By란

 

Order By란, 결과값의 정렬을 의미한다.

 

 

정렬 기준을 시키고자하는 속성명을 order by 명령어 옆에 작성해준다.

예시는 아래 코드와 같다.

# 성씨 별 몇 명이 있는지 집계 + 오름차순 정렬(asc, default)
select name, count(*) from users
group by name
order by count(*)

# 성씨 별 몇 명이 있는지 집계 + 내림차순 정렬(desc)
select name, count(*) from users
group by name
order by count(*) desc

# 이메일을 오름차순으로 문자열 정렬
select * from users
order by email 

 

❓❗ ASC와 DESC?

* ASC : 오름차순 정렬, default 값.
* DESC : 내림차순 정렬

 


 

03. Group By와 Order By - 타 문법과의 활용

 

타 문법 중, 이들과 가장 많이 활용되는 것은 단연 'Where'문이다.

아래 조건을 해결하고 싶다고 가정할 때, 코드가 어떤 식으로 구성되는지 살펴보자.

 

문제: 웹개발 종합반을 수강하는 학생들이 지불 방법 별로 몇 명씩 있을지 내림차순으로 살펴보기 
# 순서: where -> group by -> select -> order by
select payment_method, count(*) from orders
where course_title like '웹개발%'
group by payment_method
order by count(*) desc

 

순서는 위에 작성한 것과 마찬가지로, where - group by - select - order by 순으로 진행된다는 것을 참고하자!

 

코드 뒤에 붙는 세미콜론의 의미?

간혹 세미콜론을 직은 SQL문이 있다. 이것이 무엇인지 찾아보니, '여기까지가 해당 코드의 끝이다'라는 것을 명시하는 것이라고 한다. 하지만 문법만 제대로 쓰고 규칙을 맞췄다면 세미콜론을 굳이 쓰지 않고도 정상적으로 코드가 실행된다.

 

🔥 Alias란 무엇인가?

Alias란 별칭을 말한다. 별칭을 사용하면, 추후 지정한 값이 너무 복잡해 끌어오기 힘든 상황을 방지할 수 있다. 이는 table명도 별칭을 줄 수 있고, count 명령어 등과 같은 것들도 별칭을 줄 수 있다는 특징이 있다. 예시는 아래 코드 문과 같다.
# 별칭 Alias
select count(*) from orders o
where o.course_title = '앱개발 종합반'

select count(*) from orders as o
where o.course_title = '앱개발 종합반'

select count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'

 


 

04. 과제 풀이

2주 차를 마무리하는 과제를 풀이해보았다. 풀이 과정은 아래 코드와 같다.

 

과제 주제: 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단 별 주문건수 세어보기
select payment_method, count(*) as cnt from orders
where email like '%naver.com' and course_title = '앱개발 종합반'
group by payment_method 

 


 

 

오늘 수업을 수강하며, 예전 전공수업 때 들었던 내용들이 조금씩 생각났다. 내 머릿속 데이터가 완전히 날아가지 않아서 다행이다. (내가 가장 좋아했던 수업 중 하나가 데이터베이스여서 그랬던걸 지도.)

 

이렇게 꾸준히, 2주 차 스파르타 코딩 클럽 수강을 마쳤다. 꾸준히 하는 내 자신 기특하다고 칭찬해주고 싶다!

그리고 더불어, 기초적 내용을 다뤘으니 슬슬 노란 책 SQL 예시를 익힐 준비를 해야겠다는 생각이 들었다.

열심히, 즐겁게, 꾸준히, 최선을 다해야지. 늘 지금처럼만! 아자아자.