스파르타코딩 - SQL 2주차

kyra.c·2021년 8월 4일
0

SQL

목록 보기
2/4

코린이의 SQL 2주차

1. Group by

: 동일한 범주의 데이터를 묶어주어, 통계를 내주기

1-1 프로세스

문제 : 성씨별로 몇 명이 회원이 있는지 구하기

step1 : 전체데이터를 먼저 불러본다

SELECT * FROM users
group by name 

step2 : 동일한 범주의 데이터를 어떻게 묶을건지 고려 후 데이터 선택 수정

 SELECT name, COUNT(*) FROM users
group by name 

쿼리가 실행되는 순서: from → group by → select

1-2 범주의 갯수 구하기 + 전주에 배운 where 과 값이 같은지 비교/확인

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

> 테이블로 값만 카운트 보여주기
SELECT week, COUNT(*) FROM checkins
group by week


> 조건의 해당 값 카운트 모두 보여주기
SELECT * FROM checkins
where week =1

1-3 최솟값/ 최대값/ 평균값/ 합계

최소값 : 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(avg(평균값을 알고 싶은 필드명), 보여주고자 하는 소수점의 자리수)

합계 : sum (합계를 알고 싶은 필드명)

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

1-4 where 과 함께 쓰기

'신' 씨를 가진 데이터만 불러와서 개수 > group by를 사용해서 '신'씨를 가진 데이터가 몇 개인지

SELECT name, COUNT(*) FROM users
WHERE name = '신**'
GROUP by name 

쿼리가 실행되는 순서: from → where → select → group by

퀴즈

  1. 앱개발 종합반의 결제수단별 주문건수 세어보기
    SELECT payment_method, count(*) FROM orders
    group by payment_method 
2. Gmail 을 사용하는 성씨별 회원수 세어보기

SELECT name, 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

2. order by

: 깔끔한 정렬이 필요할때 사용

2-1 오름차순 정렬 (asc)

step1 : 전체데이터를 먼저 불러본다

SELECT * FROM users
group by name 

step2 : 동일한 범주의 데이터를 어떻게 묶을건지 고려후 데이터 선택 수정

 SELECT name, COUNT(*) FROM users
group by name 

step3 : 결과값을 보기좋게 정렬

아무것도 적지 않으면 기본적으로 오름차순

SELECT name, COUNT(*) FROM users
group by name 
order by count(*) 

쿼리가 실행되는 순서: from → group by → select → order by

2-2 내림차순 정렬 (desc)

step1
step2

step3 : 결과값을 내림차순 정렬

영단어 descending의 약자

SELECT name, COUNT(*) FROM users
group by name 
order by count(*) desc

2-3 문자열 정렬

- 알파벳으로 정렬

select * from users
order by email

- 가나다순으로 정렬

select * from users
order by name;

- 시간기준으로 정렬

select * from users
order by created_at desc;

3. Where와 함께 group by + order by 쓰기

Where절로 조건이 하나 추가되고, 그 이후에 Group by, Order by가 실행되는 것!

step1 테이블 전체 불러보기

select*from oreders

step2 잘라서

select*from oreders
where course_title= '웹개발 종합반'

step3 묶어서

 select*from oreders
 where course_title= '웹개발 종합반'
 group by payment_method

step4 통계내고

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

step5 정렬한다

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

4. Alias

: 별칭붙여주기 (길어지는 쿼리를 짧게)

orders 테이블을 o > 테이블 o 안에 코스타이틀(o.course_title)
count(*) 를 as cnt > cnt 필드명으로 출력

SELECT payment_method, count(*) as cnt FROM orders o 
where o.course_title ='앱개발 종합반'
group by payment_method
profile
이번 주에 내가 배운 것(Week I Learned)

0개의 댓글