엑셀보다 쉬운 SQL - 2주차

dowon kim·2023년 6월 1일
0

엑셀보다 쉬운 SQL

목록 보기
2/5

우리는 데이터에서 무엇이 궁금할까?

  • 통계: 최대 / 최소 / 평균 / 개수

👉 데이터 분석의 목적: 쌓여있는 날것의 데이터 → 의미를 갖는 '정보'로의 변환

  • 데이터베이스 테이블에 저장된 데이터: 쌓여있는 날것의 데이터
  • 가장 많은 Like를 받은 사람의 이름, 전체 신청자수, 평균 연령: 의미있는 '정보'

👉 더 나아가면? '범주 (category)' 각각의 정보가 궁금할 수 있습니다

  • 예) 과목별 신청자 평균 연령, 과목별 신청자수, 성씨별 회원수 등
  • 통계 구하기: 기존 방법의 한계

👉 우선 과목별 신청자수를 구한다고 생각해봅시다! 자, 지금까지 배운 내용을 사용해볼까요?

  • 쿼리를 어떻게 작성하면 좋을까요?
  • 과목별 신청자 수
select count(*) from orders
where course_title = "웹개발 종합반";
  • 총 두 개의 과목이 있으니, 두 개의 쿼리를 작성해서 각각 이렇게 구할 수 있겠죠?

👉 이번에는 성씨별 회원수를 구하고 싶어요! 과목별 신청자수 구했던것처럼 하면 될까요?
앗, 그런데 스파르타 회원의 성씨가 총 몇개였죠?

  • 1주차에서 쿼리로 직접 확인했듯이, 스파르타 회원의 성씨는 총 54개에요.
  • 음.. 그렇다면, 성씨별 회원수를 구하려면 총 54번의 쿼리를 작성해야 할까요?
  • 동일한 범주의 데이터를 묶어주는 Group by

👉 이렇게 불필요한 반복작업을 하도록 프로그래머들이 가만두지 않았겠죠?
그래서 SQL에는 Group by라는 문법이 있습니다.

👉 Group by란?

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미해요.
Group by를 이용하면 1) 같은 성씨의 데이터를 하나로 묶고 2) 각 성씨의 회원수를 구할 수 있어요.

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

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

  • 문자열을 기준으로 정렬해보기
select * from users
order by email;
  • 동일하게 알파벳으로도 잘 정렬이 됩니다.
select * from users
order by name;
  • 시간을 기준으로 정렬
select * from users
order by created_at desc;
  • 앱개발 종합반의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
where course_title = "앱개발 종합반"
group by payment_method;
  • Gmail 을 사용하는 성씨별 회원수 세어보기
select name, count(*) from users
where email like '%gmail.com'
group by name;
  • [꿀팁]
    1) show tables로 어떤 테이블이 있는지 살펴보기
    2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
    3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
    4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
    5) 범주별로 통계를 보고싶은 필드를 찾기
    6) SQL 쿼리 작성하기!

이외 유용한 문법 배워보기

  • 별칭 기능: Alias
    쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있습니다. 그래서 SQL은 Alias라는 별칭 기능을 지원합니다.
select * from orders o
where o.course_title = '앱개발 종합반'
select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method

  • 이처럼, 혼동을 최소화하고 원하는 이름으로 결과를 출력하기 위해 사용돼요. 이 기능은 다음 주차부터 굉장히 유용하게 사용되니, '이런게 있구나' 정도로만 기억해 주세요!

2주차 숙제

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

네이버 이메일을 사용하며 앱개발 종합반을 신청한 주문

where email like '%naver.com' and course_title = '앱개발 종합반'

의 결제수단별

group by payment_method

주문건수

select payment_method, count(*) from orders

정답

select payment_method, count(*) from orders
where email like '%naver.com' and course_title = '앱개발 종합반'
group by payment_method
profile
The pain is so persistent that it is like a snail, and the joy is so short that it is like a rabbit's tail running through the fields of autumn

0개의 댓글