Sparta코딩클럽 불꽃일지 2일차

김석현·2021년 7월 20일
0

Group by를 통해 범주의 통계를 나타내기

기존 where 절을 사용했을 때 생기는 문제점

한 데이터베이스에서 이** 이라는 사람의 명수를 구하는 문제는 where 절을 통해 쉽게 구할 수 있다.

select name, count(*) from users
where name = '이**'

출력결과)

그러나 성씨를 가진사람들의 각각의 명수를 구하는 문제에서는 범주의 범위가 넓아 구하기가 어렵다

이를 극복하기 위해 group by 가 쓰여진다.

그런데, 시트가 정렬이 잘되지 않은 것 같다. 이를 위해서 정렬에 도움을 주는 order by를 사용한다.

select name, count(*) from users
group by name 
order by name// 이름별로 정렬
select name, count(*) from users
group by name 
order by count(*)// 숫자별로 정렬

성씨를 가진사람들의 각각의 명수를 구하는 문제 에서 조건을 추가해보자

7월 12일 부터 7월 20일 사이에 계정을 생성한 사람의 한해서, 성씨를 가진사람들의 명수를 구하라

위같은 문제를 해결하기 위해선 where 절을 추가해야한다 아래와 같이 코드를 짜보자

select name, count(*) from users
group by name
where created_at BETWEEN '2020-07-12' AND '2020-07-20'

결과)

실행을 시키면 위와같이 오류가 발생한다. 왜 그럴까?? 그 이유는 아래와 같다.

SQL쿼리의 동작 순서

where -> from -> group by -> select

말로 풀어내자면, where을통해 특정 필드의 조건을 만족하는 데이터를 자르고 from이 작동한 후, group by는 그 데이터를 범주단위로 묶는다 그리고 select를 통해 데이터를 불러온다

그렇기 때문에 where절 이 group by 보다 먼저 작성되어야 한다.

select name, count(*) from users
where created_at BETWEEN '2020-07-12'
And '2020-07-20'
group by name // 정렬을 추가하고 싶다면 order by 절을 아래에 작성해준다

group by의 다양한 기능

group by는 그룹함수와 조합하여 이밖에 다양한 기능을 수행할 수 있다.

함수명기능사용
count행의 수를 계산한다count(column or* )
max값들중 최댓값을 구한다max(column)
min값들중 최솟갑을 구한다min(column)
avg평균값을 구한다avg(column)//round와 같이 사용되기도함
variance분산값을 구한다variance(column)
stddev표준편차를 구한다stddev(column)
<그룹함수>



이외의 추가적인 문법

Alias (별칭)
코드를 길어질 때 어느 한 필드가 어떤 테이블의 필드인지 알아 볼 수 있게 해준다.

select * from users u // users u라고 줄였다.
where u.created_at BETWEEN '2020-07-12' //u.created_at은 users 테이블의 created_at 필드를 말한다
And '2020-07-20'
profile
Code ing...

0개의 댓글