본문 바로가기
내마음대로만들어보자/SQL

[SQL] Group by, Order by

by 소농민! 2022. 2. 26.
728x90

1. Group by , Order by 예제

 

- 성씨별로 몇명의 회원이 있는지 

select name, count(*) from users

group by name;

;는 쿼리가 끝났음을 표시해주는거라 생각하면된다. 

 

→ SQL 쿼리가 실행되는 순서

  1. from users로 users 테이블 데이터 전체를 가져온다.
  2. group by name은 users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐준다. 
  3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다. 

 

2. Group by , Order by 기능 

 

- 주차별 오늘의 다짐 개수 구하기(동일한 범주의 개수)

select week, count(*) from checkins

group by week;

 

select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명

group by 범주별로 세어주고 싶은 필드명;

 

- 동일한 범주에서 최소값 구하기

select week, min(likes) from checkins

group by week;

 

- 동일한 범주에서 최대값 구하기

select week, max(likes) from checkins

group by week;

 

- 동일한 범주에서 평균 구하기

select week, round(avg(likes)) from checkins

group by week;

 

- 동일한 범주에서 합계 구하기

select week, sum(likes) from checkins

group by week;

 

- order by 결과 정렬 하기

(오름차순)

select name, count(*) from users

group by name

order by count(*); 

 

(내림차순)

select name, count(*) from users

group by name

order by count(*) desc;

 

- order by 는 모든 SQL 쿼리에 적용할 수 있다.

select * from checkins

order by likes desc; 

(likes를 많이 받는 순서대로 정렬 가능)

 

select * from 테이블명

order by 정렬의 기준이 될 필드명;

 

- order by 쿼리 실행 순서 

select name, count(*) from users
group by name
order by count(*);
  1. rom users로 users 테이블 데이터 전체를 가져온다. 
  2. group by name은 users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐준다.
  3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.
  4. 예) 이**, 이**, 김**, 김**, 박** 이렇게 데이터가 있었다면, 이는 2개, 김은 2개, 박**은 1개
  5. order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬해준다. 

 

- Where와 Group by, Order by 함께 사용하기 

select payment_method, count(*) from orders

where course_title = "웹개발 종합반"

group by payment_method;

 

  1. from orders로 users 테이블 데이터 전체를 불러온다.
  2. where course_title = "웹개발 종합반": 웹개발 종합반 데이터만 남긴다. 
  3. group by payment_method: 같은 payment_method을 갖는 데이터를 합쳐준다. 
  4. select payment_method, count(*): payment_method에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다. 
  5. 예) CARD, CARD, kakaopay 이렇게 데이터가 있었다면, CARD는 2개, kakaopay는 1개
  6. 만약 order by가 추가된다면? order by는 맨 나중에 실행되며, 결과물을 정렬 해준다. 

참고로, order by 는 문자열, 알파벳, 시간, 기간 등으로 모두 정렬이 가능하다.

 

3. 연습 예제

- 앱개발 종합반의 결제수단별 주문건수 

select payment_method, count(*) from orders

where course_title = "앱개발 종합반"

group by payment_method;

 

- Gmail 을 사용하는 성씨별 회원수 

select name, count(*) from users

where email like '%gmail.com'

group by name;

 

- course_id별 '오늘의 다짐'에 달린 평균 like 개수

select course_id, round(avg(likes)) from checkins

group by course_id;

 

- 쿼리 작성 팁 

1) show tables로 어떤 테이블이 있는지 확인

2) 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리를 통해 확인

3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보자.

4) 테이블을 찾았다면 범주를 나눠서 보고싶은 필드를 찾기

5) 범주별로 통계를 보고싶은 필드를 찾기

6) SQL 쿼리 작성ㅅㅅ

 

- 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수

select payment_method, count(*) from orders

where email like '%naver.com'

and course_title = '앱개발 종합반'

group by payment_method

 

4. 별치 기능 : Alias 

 

select * from orders o

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

→ orders 테이블뒤에 별칭으로 'o' 라고 붙이고 course_title에도 'o.' 으로 앞에 붙이면 orders테이블에 연관되어 있다는 의미

 

 

select payment_method, count(*) as cnt from orders o

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

group by payment_method

→ count(*)를 별칭기능으로 cnt 로 출력이 가능