Group by(그룹), Order by(정렬), Sum(합), AVG(평균), Round(반올림), Alias(별칭)

 

* Group by란?

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

Group by를 이용하면 

1) 같은 성씨의 데이터를 하나로 묶고

2) 각 성씨의 회원수를 구할 수 있어요.

 

-- (users 테이블) goup by를 사용해서 성씨별로 naver 사용자 수 구하기

select name, email, COUNT(*) from users 
	where email like '%naver.com'
	group by name;

결과값

* Order by란? (feat. ASC, DESC)

데이터를 정렬하여 출력하는 문법 (order by 정렬은 문자, 숫자, 시간 모두 사용 가능)

ASC : 오름차순(정순, 일반적으로 생략됨) ex) 1,2,3,4, / ㄱ,ㄴ,ㄷ,ㄹ,.. / 1월 1일, 1월 2일

DESC : 내림차순(역순) ex) 4,3,2,1 / ㄹ,ㄷ,ㄴ,ㄱ / 1월2일, 1월 1일

select * from users
	order by created_at;

시간 오름차순 정렬 (asc 생략)

select * from users
	order by created_at desc;

시간 내림차순 정렬 (desc)

 

* order by, group by 함께 써보기

-- 웹개발 종합반의 결제수단별 주문건수 세어보기

SELECT course_title, payment_method, COUNT(*) FROM orders
	WHERE course_title = '웹개발 종합반'
	GROUP BY payment_method
	order by COUNT(*);

결과값

 

  • group by와 order by는 콤마로 이어서 사용할 수 있다.
  • order by 콤마로 이어서 사용시 각각의 조건에 asc, desc를 설정해 줘야한다. 
select c.title, c2.week, COUNT(*) as cnt 
from courses c 
inner join checkins c2 
on c.course_id = c2.course_id
group by c.title, c2.week
order by c.title, c2.week desc;

week에만 desc를 먹여주어 내림차순으로 정렬 되었고, title은 asc가 그대로 잡혀있는것을 볼 수 있다.

 

 

 

 

-- (checkins테이블) 주차별로 오늘의 다짐의 좋아요 합계 구하기

SELECT week, SUM(likes) FROM checkins 
	group by week;

-- (checkins테이블) 주차별로 오늘의 다짐의 좋아요 평균값 구하기

SELECT week, AVG(likes) FROM checkins 
	group by week;

-- (checkins테이블) 주차별로 오늘의 다짐의 좋아요 평균값 반올림하여 구하기 (소수점 둘째자리까지)

SELECT week, ROUND(AVG(likes), 2) FROM checkins 
	group by week;

 

* Alias

쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있습니다.

그래서 SQL은 Alias라는 별칭 기능을 지원합니다.

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

 

1. from orders o => o를 orders 테이블의 별칭으로 사용 

2. COUNT(*) as cnt => cnt를 COUNT(*)의 별청으로 사용 (as 생략가능)

         

-- quiz

1. (orders 테이블)앱개발 종합반의 결제수단별 주문건수 세어보기

2. (users 테이블)Gmail을 사용하는 성씨별 회원수 세어보기

3. (checkins 테이블)course_id별 오늘의 다짐에 달린 평균 like 개수 구해보기 (소수 둘째 자리까지)

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

 

 

--정답 (더보기 클릭)

더보기

1. SELECT course_title, payment_method, count(*) FROM orders 
        WHERE course_title = '앱개발 종합반'
        group by payment_method;

2. SELECT name, COUNT(*) FROM users
       WHERE email LIKE '%gmail.com'
       group by name;

3. SELECT course_id, ROUND(AVG(likes), 2) FROM checkins 
       group by course_id;

4. SELECT course_title, payment_method, COUNT(*) as cnt FROM orders
       WHERE email LIKE '%naver.com' AND course_title = '앱개발 종합반'
       GROUP BY payment_method;

+ Recent posts