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;
select * from users
order by created_at 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;
'프로그래밍 > SQL' 카테고리의 다른 글
SQL - Case (0) | 2022.05.24 |
---|---|
SQL - Subquery (스파르타코딩 - 엑셀보다 쉬운 SQL 4주차) (0) | 2022.04.04 |
SQL - Join (스파르타코딩 - 엑셀보다 쉬운 SQL 3주차) (0) | 2022.03.24 |
SQL 문법 (스파르타코딩 - 엑셀보다 쉬운 SQL 1주차) (0) | 2022.03.21 |