SQL 개발일지 - 2

Joon Ho Moon·2021년 5월 15일
0

2주차 수업

스파르타코딩클럽 SQL 1주차 수업이 '내가 원하는 데이터를 선별하여 띄우는 방법'을 가르쳐준다면, 2주차 수업은 기존에 있는 데이터를 '내가 원하는 방식으로 편집해서 띄우는 방법'을 공부하기 시작한다.

데이터의 범주를 나누어주는 Group by

'Group by'는 내가 원하는 범주 별로 데이터를 묶어주는 명령어이다.
예) 사용자 정보를 성씨별로 구분을 짓고 싶다면,

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

을 입력하면 된다. 그럼 사용자 정보가 성씨별로 묶인 데이터가 성씨 정보와 그 수까지 기록되어 함께 정렬된다.

예) 사용자 정보 중, 이메일 주소가 Naver인 사람들을 성씨별로 몇 명이 있는지를 통계내는 법.
Select name count(*) from Users
Where email like '%naver.com'
Group by name

예) 사용자들의 오늘의 다짐을 주차별로 나누기
Select week, count(*) from checkins
group by week

데이터 통계 내기 - 최대 / 최소 / 평균 / 갯수세기

데이터의 최소값 / 최대값 / 평균 / 갯수세기는 다음과 같은 간단한 명령어로 구할 수 있다.

최소값 - min, 최대값 - max, 평균 - avg, 갯수세기 - count

예) 주차별 '오늘의 다짐' 중 가장 적은 좋아요 수 구하기
Select week, min(likes) from checkins
Group by week

예) 주차별 '오늘의 다짐' 중 가장 많은 좋아요 수 구하기
Select week, max(likes) from checkins
Group by week

예) 주차별 '오늘의 다짐'의 평균 좋아요 수 구하기
Select week, round(avg(likes),1) from checkins
group by week

'round'는 소수점 n 자리만 보이도록 그 이하의 소수점자리에서는 반올림 하라는 뜻이다.

  • 데이터의 합 구하기 - 'sum'

예) 각 주차별 '오늘의 다짐'에 달린 좋아요 수를 합하라.
Select week, sum(likes) from checkins
group by week

데이터를 보기 좋게 오름차순/내림차순으로 정리하는 Order by

Order by는 뒤에 입력한 field의 데이터를 오름차순 혹은 내림차순으로 정리할 수 있도록 하는 명령어이다.

예) 사용자 정보를 성씨별로 숫자가 많은 순/숫자가 적은 순으로 정렬하기
Select name, count() from users
group by name
order by count(
)
이라고 입력하면 오름차순이고,
order by count(*) 뒤에 desc를 붙이면 내림차순이 된다.

Where 쿼리와 Group by, Order by 함께 사용하기 예시

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

Select payment_method, count(*) from orders
Where course_title = '웹개발 종합반'
Group by payment_method
Order by Desc

Order by의 활용성

Order by 는 숫자를 오름차순이나 내림차순으로 정리하는 것말고도, 시간 혹은 문자열을 기준으로도 순서에 맞게 정렬할 수 있다.

예) 사용자들의 정보를 가입 시간에 따라 순서대로 정렬하기
Select * from users
Order by created_at desc

Quiz

  1. 앱개발 종합반의 결제수단 별 주문 건수 세어보기
    Select payment_method, count(*) from orders
    Where course_title = '앱개발 종합반'
    Group by payment_method

  2. Gmail을 사용하는 성씨별 회원수
    Select name, email, count(*) from users
    Where email like '%gmail.com'
    Group by name

  3. Course_id별 '오늘의 다짐'에 달린 평균 Like 갯수 구해보기
    Select course_id, round(avg(likes),1) from checkins
    Group by course_id

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

Select email, course_title, payment method, count() from orders
Where email like '%naver.com' and course_title = '앱개발 종합반'
Group by payment_method
order by count(
) desc

마지막 팁

유용한 쿼리 작성 순서
1. Show tables로 어떤 테이블이 데이터베이스에 있늕 ㅣ살펴보기
2. 제일 원하는 정보가 있을 것 같은 테이블에 Select * from '테이블명' limit 10 쿼리 날려서 원하는 정보가 있는지 확인하기
3. 여러 테이블에 2번 쿼리를 적용해 데이터베이스 구성 파악하기.
4. 원하는 테이블을 찾으면 범주를 나눠서 보고싶은 필드를 찾기.
5. 범주별로 통계를 보고싶은 필드를 찾기.
6. SQL 쿼리문 작성하기.

profile
몽상가

0개의 댓글