걷기 시작한 Coding Novice

SQL

Group by, Order by 연습해보기

Spell 2022. 5. 11. 22:43

이제 예제를 가지고 조금 연습을 추가로 해볼꺼다.

 

예제는 다음과 같다.

(1) 앱개발 종합반에 결제 수단별 주문건수.

(2) Gmail을 사용하는 성씨별 회원수 세어보기.

(3) Course_id오늘의 다짐에 달린 평균 like 개수 구해보기.

 


(1) 앱개발 종합반에 결제 수단별 주문건수.

주문건수니까 count를 활용하려나? show tables로 살펴보니 테이블은 orders를 활용해야 할꺼 같다.

 

일단 orders 테이블을 불러오자.

select * from orders

 

결제 수단별이니까 group by로 결제수단별로 묶어주었다.

select * from orders
group by payment_method

 

앱개발 종합반만 남겨기위해 where을 사용해주었고

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

 

주문건수가 몇건인지 알기위해 count를 사용해서 완성시켜줬다.

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

 

보기좋게 오름차순으로 정렬해주고 끝!

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

짠!

 


(2) Gmail을 사용하는 성씨별 회원수 세어보기.

이건 users 테이블을 사용하면 될 것 같다.

select * from users

 

성씨별로 묶어주고나서!

select * from users
group by name

 

where로 email에서 gmail.com만 사용하는 것만 추출하자.

select * from users
where email like '%@gmail.com' 
group by name

 

이제 회원수를 세야하니 count를 활용해주고

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

 

이번에는 내림차순으로 정리해보자.

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

 

 


(3) Course_id오늘의 다짐에 달린 평균 like 개수 구해보기.

음, 오늘의 다짐의 like개수는 checkins 테이블 안에 있었떤거 같은데 확인해보자.

select * from checkins

끝에 likes를 확인할 수 있다.

 

그럼 course_id별로 확인해야 하니까 묶어주자.

select * from checkins
group by course_id

 

오? 이건 두 종류밖에 없네? 아마 course_id가 웹/앱개발 두 종류라 그런가 보다?

 

저기 likes오늘의 다짐에 달린 like 개수니까.. 평균을 구하는게 avg(필드명)이였다.

select avg(likes) from checkins
group by course_id

 

첫 줄에 아무것도 안적어주니, 어떤게 어떤거인지 모르겠다. 필드명을 추가로 달아주자.

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

 

하나는 소수점 자리 표기가 다르니 통일시켜주는게 보기 좋을 것 같다. 첫번째 짜리까지만 보자.

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

 

2개 밖에 없어서 의미가 있을까 싶긴한데 정렬도 해주자. 오름차순으로

select course_id, round(avg(likes),1) from checkins
group by course_id
order by round(avg(likes),1)

짜잔! 끝!

 


이제 좀 group by, order by가 손에 익은거 같은 느낌이다.

추가로

 

쿼리를 작성할 때 다음의 과정을 따라하면 조금 편하다.

1) show tables로 일단 어떤 테이블들이 있는지 살펴보고.

2) 원하는 정보가 있을 것 같은 테이블에 다음과 같은 쿼리를 날려본다.

select * from 테이블명
limit 10

(추후 우리가 다루게 될 데이터의 량은 엄청나게 방대할 수 있다. 그때에 시간 절약을 위해 limit을 자주 써줘야 한다)

3) 만약, 원하는 정보가 없다면? 다시 다른 테이블을 select을 이용하여 살펴보자.

4) 찾았다면? 범주를 나눠서 보고싶은 필드를 찾자.

5) 이후, 범주별로 통계를 보고싶은 필드를 찾고, SQL쿼리를 작성한다!