Group by 문법 해석 & 구조
: 동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것
select (범주가 담긴 필드명) from (테이블명)
group by (범주가 담긴 필드명)
Order by 문법 해석 & 구조
: 데이터를 오름/내림 차순으로 정렬할 때 사용 (오름 - ASC, 내림 - DESC)
select * from (테이블명)
order by (정렬의 기준이 될 필드명)
Tip. Order by의 경우 기본으로 오름차순으로 정렬된다.
select name, count(*) from users
group by name;
❖ SQL 쿼리 실행 순서 : from → group by → select
1. from users: users 테이블 데이터 전체를 가져옵니다.
2. group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐줍니다.
3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.
예) 이, 이, 김, 김, 박 이렇게 데이터가 있었다면, 이는 2개, 김은 2개, 박은 1개겠죠!
select * from checkins
order by likes desc;
❖ SQL 쿼리 실행 순서 : from → group by → select → order by
순서를 반드시 지켜 Error 방지
최댓값(max) / 최솟값(min) / 평균(avg) / 합계(sum) / 별칭(Alias)
최댓값(max) 예시 → 평균, 합계 등 적용 방법은 동일
Q. 주차별 '오늘의 다짐'의 좋아요 최댓값 구하기
select week, max(likes) from checkins
group by week;
select (범주가 담긴 필드명), max(최댓값을 알고 싶은 필드명) from (테이블명)
group by (범주가 담긴 필드명);
별칭(Alias) 예시
쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있습니다. 그래서 SQL은 Alias라는 별칭 기능을 지원합니다.
Orders O
= Orders 테이블을 O로 약식 표기
O.weeks
= Orders 테이블 중 weeks 필드를 지칭
위 내용들을 토대로 응용 문제
Q. 웹개발 종합반의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
where course_title = "웹개발 종합반"
group by payment_method
Q. 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
where email like '%naver.com'
and course_title = "앱개발 종합반"
group by payment_method;