국비지원을 받아 내일배움카드로 결제하여 학습중인 스파르타코딩클럽의 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),2) from 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 o
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 학습했던 내용 자세히 정리하였습니다.
위 정보가 도움이 되셨다면 공감, 댓글 및 금융지능 구독을 부탁 드립니다.
▼ 함께 보시면 도움될만한 정보
'생활정보 > IT 모바일' 카테고리의 다른 글
애플페이 인터넷에 연결할 수 없습니다 해결방법 (2) | 2023.03.22 |
---|---|
인스타 프로필 사진 확대 방법 (2) | 2022.09.27 |
SQL Select Where 절 문법 (0) | 2022.06.17 |
아이패드 셀룰러 KT 유심 구매 방법 후기 (0) | 2022.01.04 |
인스타그램 팔로워 순위 총정리 (0) | 2021.12.11 |