걷기 시작한 Coding Novice

SQL

group by, order by 가 뭔데? (통계 관련 최대 / 최소 / 평균 / 개수)

Spell 2022. 5. 5. 03:06

데이터베이스 테이블에 저장된 데이터는 쌓여있는 날 것의 데이터이다.

쌓여있는 날 것의 데이터를 뽑아 썻다면, 이후에는 이를 가지고 의미를 갖는 '정보'로 변환하여 데이터베이스 테이블에 저장된 데이터를 사용할꺼다.

예를들어 가장 많은 like를 받은 사람의 이름, 전체 신청자수, 평균 연령 등은 의미있는 '정보'이다.

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

 

우선 과목별 신청자수를 구한다고 한다면?

select count(*) from orders
where course_title = '앱개발 종합반'
select count(*) from orders
where course_title = '웹개발 종합반'

총 두 개의 과목이 있으니, 두 개의 쿼리를 작성해서 각각 위의 사진처럼 구할 수 있다.

 

통계 구하기 : 기존 방법의 한계

이번에는 성씨별 회원수를 구하고 싶어 졌다면? 과목별 신청자수 구햇던 것 처럼 하면 될까? 그런데 내가 가지고 있는 스파르타 데이터베이스의 자료에 회원의 성씨가 총 몇개였지?

 

select count(distinct(name)) from users

 

음.. 54개의 성이 존재하고, 위의 방법대로 하자면..

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

김씨가 100개..

 

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

이씨가 85개..

잠깐만.. 성씨별 회원수를 구하려면 총 54개의 성이 존재하니까.. 총 54번의 쿼리를 작성해야 하나? 오우..

 


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

이렇게 불필요한 반복작업을 하지 않도록 SQL에는 group by라는 문법이 있다.

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미한다.

group by를 이용하면 같은 성씨의 데이터를 하나로 묶고, 각 성씨의 회원수를 구할 수 있다.

 

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

그래.. 이게 지식인이지..

 

깔끔하게 데이터를 정렬해주는 order by

위의 사진의 데이터는 뭔가.. 뭔가.. 불편하다. 정렬이 필요할 것 같다. 오름차순이든 내림차순이든!

order by라는 기능을 사용하면 이렇게 정렬이 가능하다.

 

좋아.. 그래서 어떻게 오름차순이나 내림차순으로 할 수 있는데? 배워봐야지.

이제 group by도 order by도 더 써보면서 익숙해져 봐야지.

'SQL' 카테고리의 다른 글

order by 사용해보기  (0) 2022.05.05
group by 사용해보기  (0) 2022.05.05
Select, Where 실전 퀴즈 풀어보며 익히기  (0) 2022.05.05
Where 절과 자주 같이 쓰는 문법 써보기  (0) 2022.05.03
Select 쿼리문  (0) 2022.05.03