본문 바로가기

Education

[엑셀보다 쉬운 SQL] week2: Group by, Order by

반응형

강의 자료 

 

[내일배움단] 엑셀보다 쉬운 SQL - 2주차

매 주차 강의자료 시작에 PDF파일을 올려두었어요!

teamsparta.notion.site


1. 2주차 오늘 배울 것

  • 통계 : 최대(max) / 최소(min) / 평균(avg) / 갯수(count)
  • 통계 구하기: 기존 방법의 한계를 보완
    • ex) 성씨별 회원수를 구하려면, 성씨별로 count 해야하는가!?
  • 동일한 범주의 데이터를 묶어주는 Group by
  • 깔끔하게 데이터를 정렬해주는 Order by (오름차순, 내림차순)

 

 

2. 범주의 통계를 내주는 Group by

성씨별로 회원수 구하기

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

🔹쿼리 실행 순서: from ➡️ group by ➡️ select

  1. from users: users 테이블에서 데이터를 불러옵니다
  2. group by name: name이라는 필드에서 동일한 값을 갖는 데이터를 하나로 합쳐줍니다
  3. select name, count(): 이름과 count()를 출력해 주는데, 여기서 count(*)는 group by로 합쳐진 데이터의 개수를 세어주는 것입니다!

 

  • users 테이블을 group by name으로 묶고,
  • name으로 묶인 데이터들의 각 수(count(*))를 세어줘라.
  • 하지만 숫자만 뜨면 어떤 데이터인지 모르므로, select에 name도 작성한다.

 

Quiz 1) users 테이블에서 '신' 씨를 가진 데이터만 불러와서 데이터가 몇 개인지 살펴보기

select * from users
where name = '신**'

Quiz 2) users 테이블에서 '신' 씨를 가진 데이터만 불러와서 개수 살펴보기

select name, count(*) from users
where name = '신**'
group by name

 

 

 

3. Group by, Order by 사용해보기

Group by의 여러가지 기능

count

주차별 '오늘의 다짐' 개수 구하기

select week, count(*) from checkins
group by week

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

sum

주차별 '오늘의 다짐'의 좋아요 합계 구하기

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

 

Order by

  • 정렬은 가져올 것 다 가져오고 제일 마지막에 해야하므로 가장 마지막에 작성해준다.

order by

위의 결과의 개수 오름차순 정렬하기(default값)

select * from checkins
order by likes

order by ~ desc

위의 결과의 개수 내림차순 정렬하기

 

Where와 Group by, Order by 함께 사용해보기

❗쿼리 순서

  • from ➡️ where ➡️ group by ➡️ select ➡️ order by

 

Quiz ) 웹개발 종합반의 결제수단 별 주문건수 세고 내림차순으로 띄우기

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

 

 

4. 같이 삽질해보기

다음과 같이 작성하면 데이터가 한 줄씩 밖에 안나온다.

select * from orders
group by payment_method

왜냐하면 어떤 값을 보여줄지 작성하지 않았기 때문. 대표적인 값 하나씩만 보여준다.

따라서 한 줄씩 나와도 당황하지 말고, 어떤 값을 가져올지 작성해준다.

 

이외 에러 메시지가 발생해도 에러 메시지를 보고 무엇을 잘못 작성했는지 깊게 생각해보고 다시 작성해보자.

 

 

5. Order by, Group by 같이 연습해보기

Order by 연습하기

문자열 기준으로 정렬

ex) email 기준으로 정렬

ex) name 기준으로 내림차순 정렬

 

시간 기준으로 정렬

ex) created_at 기준으로 정렬

 

Group by 연습하기

Quiz

Quiz 1) 앱개발 종합반의 결제수단별 주문건수 세어보기

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

 

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

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

 

Quiz 3) course_id별 '오늘의 다짐'에 달린 평균 like 개수 구해보기

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

 

🍯쿼리 작성 꿀팁

1) show tables로 어떤 테이블이 있는지 살펴보기

2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기

3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기

4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기 5) 범주별로 통계를 보고싶은 필드를 찾기 6) SQL 쿼리 작성하기!

 

6. 이외 유용한 문법 배워보기

별칭 기능: Alias

  • 쿼리가 길어지는 경우 사용함

 

테이블명에 별칭 붙이기

orders ➡️ o

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

 

필드명에 별칭 붙이기

count(*) ➡️ cnt

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

결과 테이블에 count(*) ➡️ cnt

 

 

7. 끝 & 숙제 설명

Quiz ) 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기

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

 

 

 

 

 

 

반응형