본문 바로가기
내일배움캠프(Sparta)/엑셀보다 쉬운 SQL

[SQL] 2주차 (Group by, Order by )

by mmm- 2023. 9. 15.

1. Group by

Group by

: 동일한 범주의 데이터를 묶어줌

  • where 절을 이용해 비효율적으로 여러 개의 쿼리를 작성할 것을 Group by 사용시 한 번에 가능
select name, count(*) from users
group by name

→ count(*)는 group by로 합쳐진 데이터의 개수를 세어주는 것
     (name을 그룹으로 묶고 그룹으로 묶이는 것의 갯수를 세겠다는 의미)

실행 결과

 

최소값 (Min())

select week, min(likes) from checkins
group by week

 

최대값 (Max())

select week, max(likes) from checkins
group by week

 

평균 (avg())

select week, avg(likes) from checkins
group by week

 

round()

: round로 감싸주면 반올림

select week, round(avg(likes),2) from checkins
group by week

→ round(,2) 는 소수점 둘째자리까지만 나오게 반올림 한 것

 

sum()

select week, sum(likes) from checkins
group by week

→ checkins 테이블의 주차별 likes 수를 더한 데이터를 가져옴


2. Order by

Order by

: 데이터 정렬

데이터 정렬은 맨 마지막에 ! 

그래서 아래의 코드의 경우 실행 순서는 from > group by > select > order by

select name, count(*) from users 
group by name
order by count(*)

 

작은거부터 정렬됨

 

아무것도 안 적으면 default가 오름차순이기 때문에 작은거부터 정렬

오름차순은 asc, 내림차순은 desc

 

select payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method
order by count(*)

→ 웹개발 종합반의 결제수단별 주문건수 세기 (오름차순 정렬)


3. 이 외 유용한 문법

Alias

: 별칭 기능

  • 쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있는 문제를 해결
  • 보통 알파벳 한글자로 짧게 
select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method

as를 가지고도 별칭을 사용할 수 있음. count(*) 대신 cnt로 나타나게끔 한 것


4. 퀴즈 & 과제

select payment_method, count(*) from orders
where course_title = '앱개발 종합반'
group by payment_method

>> 앱개발 종합반의 결제수단별 주문건수 세기

 

select name, count(*) from users
where email like '%gmail.com'
group by name

>> gmail을 사용하는 성씨별 회원수 세기

 

select course_id, avg(likes) from checkins
group by course_id

>> course_id별 오늘의 다짐에 달린 평균 like 개수 구하기

 

select payment_method, count(*) from orders
where email like '%naver.com'
and course_title = '앱개발 종합반'
group by payment_method

>> 네이버 이메일을 사용해 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세기