생활정보/IT 모바일

SQL group by, order by 쿼리

금융지능 2022. 6. 22. 09:30

 

국비지원을 받아 내일배움카드로 결제하여 학습중인 스파르타코딩클럽의 SQL 강의 2주차 개발일지입니다. 개발일지이지만 사실 공부했던 내용의 복습 및 기록 차원에서 정리하였습니다.

 

hrd net 내일배움카드를 소지하고 계신 직장인이시라면 국비지원금액과 더불어 스파르타코딩클럽의 환급정책을 통해 무료로 SQL 학습이 가능합니다.

 

SQL 학습이 궁금하신 분들은 아래 링크를 통해 확인해보시기 바랍니다. (친구추천 링크이며 아래 링크로 가입하여 수강신청을 하신분께는 5만원 할인쿠폰이, 제게도 5만원 선물이 주어집니다:-)

- 스파르타코딩클럽 바로가기


SQL Group by 쿼리

group by SQL 쿼리는 '~별로'라는 뜻을 내포하는 조회값을 불러올때 사용됩니다. 지금까지 SQL을 사용할때 보통 '전체 값을 대충 불러와서 엑셀로 작업하면 되지'라는 안일한 생각으로 작업을 하다보니 작업의 비효율이 곳곳에서 일어나고 있었습니다. 생각해보면 방대한 데이터를 담은 데이터베이스에서 내가 빠르게 보고자 하는 결과값은 한두가지 필드의 값이 전부인데 굳이 모든 결과값을 불러올 필요가 없었던 것입니다. 그런데 이 group by의 역할과 기능에 대해 이해한 이제부터는 조회하고자 하는 결과값을 미리 머릿속으로 그려보고 group by 및 order by를 적재적소에 활용해야겠다는 생각을 하게 되었습니다. 


SQL 개수 조회 쿼리 count(*)

아스테릭스 *를 count와 괄호로 감싸줍니다. 그러면 특정 필드의 값을 세어보고자하는 값별 개수가 조회됩니다. 다른 쿼리들과 달리 개수를 조회하고자 할때는 'count(*)' 전체를 입력해야 합니다.

----------------------------------------------------------------

select payment_method, count(*) from orders

group by payment_method

----------------------------------------------------------------


SQL 평균값 조회 쿼리 (avg)

group by로 지정한 특정 필드의 평균값을 조회하고자 할때는 avg를 사용하면 됩니다. 

----------------------------------------------------------------

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

----------------------------------------------------------------

 

SQL 반올림 방법

여기서 SQL을 통해 조회한 숫자를 반올림 하는 방법은 아래와 같습니다.

 

바로 'round( )'로 감싸주면 됩니다. 위의 예에서는 평균값을 소수점 2자리까지 조회하라는 쿼리입니다. 반올림의 경우 avg뿐만아니라 다른 쿼리들에서도 적용 가능합니다.


SQL 최소값 조회 쿼리 (min)

group by로 지정한 특정 필드의 최소값을 조회하고자 할때는 min을 사용하면 됩니다. 

----------------------------------------------------------------

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

----------------------------------------------------------------


SQL 최대값 조회 쿼리 (max)

group by로 지정한 특정 필드의 최대값을 조회하고자 할때는 max를 사용하면 됩니다. 

----------------------------------------------------------------

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

----------------------------------------------------------------

 


SQL Order by 정렬 쿼리

 

내가 조회하고자 하는 결과값을 정렬하고자 할때에는 order by 쿼리를 사용하면 됩니다.

 

SQL 내림차순 쿼리 desc

----------------------------------------------------------------

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

----------------------------------------------------------------

 

SQL 오름차순 쿼리 asc

----------------------------------------------------------------

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

----------------------------------------------------------------

 

group by를 한 다음에 order by를 써야 하는지 의문이 생길 수 있지만, 결론부터 말하자면 그렇지 않습니다.

 

간단하게 아래와 같이 checkins 테이블에서 내용을 전체 조회하고 order by를 사용해도 됩니다. 어떤 상황에서도 order by를 사용해주면 내가 조회하고자 하는 데이터를 오름차순, 내림차순으로 볼 수 있게해주는게 order by인 것입니다.

----------------------------------------------------------------

select from checkins
order by likes DESC 

----------------------------------------------------------------

 

아래 쿼리에서 select, group by, order by가 적용되는 SQL 쿼리 순서를 정리하자면 아래와 같습니다.

----------------------------------------------------------------

select name, count(*) from users

group by name

order by count(*)

----------------------------------------------------------------

 

from → group by → select → order by

즉, from으로 users 테이블의 값 전체를 가져오고, group by name으로 users 테이블에서 name 값을 갖는 열의 데이터를 병합해주고, select name, count(*)로 병합된 name 값이 몇개인지를 세어준 다음, order by로 오름차순 값으로 정렬해 조회된 값을 보여주게 됩니다. (order by 뒤에 desc나 asc로 내림차순이냐, 오름차순이냐를 정해주지 않으면 default 값으로 오름차순으로 보여지게 됩니다.


where 절과 group by, order by 함께 사용하는 방법

특정 열의 값이 무엇(웹개발 종합반)이고 특정 열의 값을 order by 기준으로(~별로) 몇개의 값이 있는지 조회하는 쿼리 예시

----------------------------------------------------------------

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

----------------------------------------------------------------


별칭 Alias SQL 쿼리 문법

1) 테이블과 필드를 연결짓기

쿼리가 길어지다 보면 내가 작성한 쿼리의 열이 어느 테이블의 열인지 식별하기 어려울 수 있습니다. 이를 방지하기 위해 쿼리에서 Alias로 흔적을 남겨줄 수 있습니다.

 

아래 쿼리에서는 빨간색으로 표시한 o가 Alias에 해당합니다. course_title이 어느 테이블의 열인지 확인하기 위해 from 다음에 order의 첫 알파벳 'o'를 붙이고 아래 where절에서 'o.'를 작성하여 테이블과 열을 연결해 줍니다.

----------------------------------------------------------------

select from orders 
where o.course_title = '앱개발 종합반'

----------------------------------------------------------------

 

 

2) 필드명 변경 방법 : as

더불어 조회되는 특정 열의 값도 변경할 수 있습니다.

----------------------------------------------------------------

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

----------------------------------------------------------------

위와 같이 쿼리를 실행하면 아래와 같이 pay, count(*)로 조회됩니다.

 

그런데 내가 count(*)값이 보기 싫어 다른 이름으로 변경하고 싶다고 하면, count(*)값 뒤에 'as XXX'를 통해 변경할 수 있습니다. 아래와 같이 'count(*)' 필드명이 'cnt'로 변경된 것을 확인할 수 있습니다.

----------------------------------------------------------------

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

----------------------------------------------------------------


SQL 쿼리 작성 순서 (의식의 흐름)

1) 먼저 show tables로 어떤 테이블이 있는지 살펴봅니다
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려봅니다

- 테이블 용량이 너무 클 경우 limit를 활용해 주면 됩니다
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해봅니다
4) 테이블을 찾았다면 범주를 나눠서 보고싶은 필드를 찾아봅니다
5) 범주별로 통계를 보고싶은 필드를 찾습니다
6) SQL 쿼리 작성을 시작합니다


이상으로 SQL 쿼리 group by, order by 학습했던 내용 자세히 정리하였습니다.


위 정보가 도움이 되셨다면 공감, 댓글 및 금융지능 구독을 부탁 드립니다.

 

▼ 함께 보시면 도움될만한 정보

- SQL Select Where 절 문법

 

SQL Select Where 절 문법

아래에 정리한 내용은 고용노동부 국비지원 교육 프로그램의 일환으로 스파르타 코딩 클럽에서 학습중인 내용을 정리한 것입니다. hrd net 내일배움카드를 소지하고 계신 직장인이시라면 국비지

financialiq.tistory.com

- 티스토리 구글 에드센스 연동 안될때 해결방법

 

티스토리 구글 에드센스 연동 안될때 해결방법

티스토리에 구글 에드센스를 연동하는 기능이 생기고난 이후부터 구글 에드센스 수익이 급감하였습니다. 이 부분은 티스토리측 공지의 수익 관련 포스팅마다 댓글에서 티스토리 이용자분들이

financialiq.tistory.com