비개발자의 웹개발

[스파르타 코딩 클럽] 엑셀보다 쉬운 SQL 2주차

2023. 1. 12. 08:39

쿼리작성 Tip

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

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

3) 테이블을 찾았다면, 범주를 나눠서 보고싶은 필드 찾기
4) 범주별로 통계를 보고싶은 필드 찾기

5) SQL 쿼리 작성하기

 

쌓여있는 날것의 데이터를 의미를 갖는 '정보'로 변환하는 과정에 대해 학습

묶는 연습! - '범주(category)' 각각의 정보 (예: 과목별 신청자 평균 연령, 과목별 신청자수, 성씨별 회원수 등)

1. Group by

동일한 범주의 데이터를 묶어주는 것

 

(예시1) 성이 같은 사람들이 몇명인지 데이터 추출

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

'users를 name으로 묶고, 묶은 것 당 카운트를 해서 보여줘라.'

*1주차 과정까지는 '성이 '이'씨인 ~' 과 같이 특정한 범위를 주고 데이터를 추출했다면,

2주차 과정에서는 users의 모든 성각각 몇명씩 있는지 데이터로 출력하는 법을 학습*

 

(예시2) 명령어 입력 순서 익히기

1단계: users 테이블 전체 불러오기

select * from users

2단계: users 테이블에서 '신'씨를 가진 데이터만 불러와서 갯수 살펴보기

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

3단계: group by를 사용해서 '신'씨를 가진 데이터가 몇 개인지 살펴보기

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

(예시3) naver.com 이메일을 사용하는 사람들 중에서 성씨별로 몇명씩 있는지 확인하기

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

 

2. 동일한 범주의 갯수 구하기: count(*) 사용

(예시4) 주차별 '오늘의 다짐' 갯수 구하기

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

 

Where문으로 결과가 동일한지 검증해보기

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

 

3. 최솟값 min(필드) / 최댓값 max(필드) / 평균값 avg(필드) / 합계 sum(필드) 구하기

(예시5) 주차별 '오늘의 다짐'의 좋아요 최솟값 구하기

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

 

(예시6) 주차별 '오늘의 다짐'의 좋아요 최댓값 구하기

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

 

(예시7) 주차별 '오늘의 다짐'의 좋아요 평균값 구하기

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

*이 때, round(avg(필드),숫자) 사용하여 소수점 아래 몇 자리까지 나타낼지 표현 가능

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

 

(예시8) 주차별 '오늘의 다짐'의 좋아요 합계 구하기
select week, sum(likes) from checkins group by week

4. Order by (항상 데이터를 추출한 뒤 맨 마지막에 실행)

깔끔하게 데이터를 정렬하는 것

문자열과 시간, 숫자 등 오름차순/내림차순 정렬이 가능

 

(예시9) 오름차순 정렬(기본값 또는 asc)

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

 

(예시10) 내림차순 정렬(desc)

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

 

(예시11) 웹개발 종합반의 결제수단별 주문건수 세어서 count(*)별로 오름차순으로 나타내기

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

(예시12) 앱개발 종합반의 결제수단별 주문건수 세어보기

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

 

(예시13) Gmail을 사용하는 성씨별 회원수 세어보기

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

 

(예시14) Course_id별 '오늘의 다짐'에 달린 평균 like 개수 구해보기

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


 5. 별칭 기능 Alias

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

- orders를 o로 표기한다는 의미, o.course_title 이 명확해짐

- count(*)를 as 를 붙임으로서(as cnt) cnt로 필드명이 변경됨

 

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

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