오늘은 Group by, Order by에 대해서 학습하려고 한다.
생각보다 예전에 쓸 때는 헷갈렸던 부분이 몇 가지 있었는 데, 이번 학습으로 확실하게 감을 잡게 된 것 같다.
Group by - 컬럼에 있는 내용들을 묶어서 한 번에 보여줄 수 있는 쿼리
Order by - 추출된 내용들을 칼럼 기준으로 오름차 순, 내림차 순으로 정리해 준다.
학습하면서 정리한 내용들을 주석을 넣은 쿼리문으로 한 번에 정리해 보았다!
-- DB 테이블 확인해보기
show tables;
-- 그룹 바이는 같은 값의 셀들끼리 묶어주는 역할이라고 생각하면 된다.
-- 그룹 바이를 쓰지 않고 이름과 카운트를 쓰면, 카운트의 열 개수만큼만 표시가 되기 때문에
-- null값이라 표현이 안되고 네임에서는 카운트의 열 개수만큼만 표시되어 이**만 뜬다.
SELECT name, COUNT(*) FROM users;
-- 신**이 세보면 14개, 그룹 바이를 써서 카운트를 했던 것과 동일하다는 것을 알 수 있다.
SELECT * FROM users
where name = "신**";
-- 이런 식으로 그룹 바이는 Count로 가장 많이 쓰인다고 보면 된다.
SELECT name, COUNT(*) FROM users
group by name;
-- 그룹 바이와 함께 연산자들을 알아보자.
-- 일단 week로 기본적인 갯수와 테이블을 확인해 본다.
SELECT week, count(*) from checkins c
group by week;
SELECT * from checkins c
where week = 1;
-- 테이블의 최소값을 구한다. min(컬럼명), 꼭 group by와 함께 써야한다.
select week, min(likes) from checkins c
group by week;
-- 테이블의 최대값을 구한다. max(컬럼명), 꼭 group by와 함께 써야한다.
SELECT WEEK, max(likes) from checkins c
group by week;
-- 테이블의 평균값을 구한다. avg(컬럼명), 꼭 group by와 함께 써야한다.
-- 소수점을 설정하고 싶으면 round를 덮어씌우면 됨.
SELECT week, avg(likes) from checkins c
group by week;
-- 소수점 설정 (한자리, 반올림됨)
SELECT week, ROUND(AVG(likes), 1) from checkins c
group by week;
-- 테이블의 합을 구한다. sum(컬럼명) 꼭 group by와 함께 써야한다.
SELECT week, sum(likes) from checkins c
group by week;
-- 결과 정렬은 Order By를 쓴다! 기본적으로 오름차순 (asc), 내림차순은 desc 입력해주면 됨.
-- 정렬은 가장 마지막에 써주는 것이 좋음.
SELECT name, count(*) FROM users u
group by name
ORDER BY COUNT(*) DESC ;
-- where절과 함께 그룹바이 같이 쓰기, 오더바이도 포함, 어렵지 않아요 그냥 쓰면 되요.
SELECT payment_method, count(*) from orders o
WHERE course_title = "웹개발 종합반"
group by payment_method
order by COUNT(*) desc;
-- 이러면 묶긴 묶었는데 뭘 통계내라고 안써줬으니 대표적인 것만 보여준 것.
select * from orders o
group by payment_method;
-- 그룹바이를 쓸때는 묶어준 컬럼을 꼭 보여주는 것이 데이터를 표시하는 데 큰 도움을 준다.
SELECT payment_method, count(*) from orders o
group by payment_method;
-- Quiz!
-- 앱개발 종합반의 결제수단별 주문건수 세어보기
SELECT payment_method, count(*) from orders o
where course_title like '%앱개발%'
GROUP BY payment_method
order by count(*) DESC;
-- gmail을 사용하는 성씨별 회원수 세어보기
SELECT name, count(*) from users
where email like '%gmail%'
GROUP BY name
ORDER BY count(*) DESC ;
-- course_id별 '오늘의 다짐'에 달린 평균 like 갯수 구해보기
select course_id, ROUND(avg(likes),1) from checkins
group by course_id;
-- alias? 쿼리가 점점 길어지면서 종종 헷갈릴 수 있어서, 단축이나 별칭을 쓰는 기능
-- 알파벳 한 글자 정도로 from 테이블 뒤에다가 별칭을 정해준다.
-- select 뒤에다가도 as를 붙여서 별칭 지정해줄 수 있음
SELECT payment_method as abc, COUNT(*) as cnt FROM orders o
where o.course_title = '앱개발 종합반';
group by payment_method;
-- Homework
-- 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단 별 주문건 수 세어보기
select payment_method, COUNT(*) from orders o
where course_title = '앱개발 종합반' and email like '%naver%'
group by payment_method
order by count(*) desc
2주 차 정리 끝.
3주 차에서는 Join을 다뤄보도록 하겠다.
'Loopy's 개발일지' 카테고리의 다른 글
[SQL] 데이터 분석 연습 4주차 - Fin (0) | 2023.03.09 |
---|---|
[SQL] 데이터 분석 연습 3주차 (0) | 2023.03.08 |
[SQL] 데이터 분석 연습 1주차 (0) | 2023.02.23 |
웹 개발 5주차 (최종) (0) | 2023.01.12 |
웹 개발 4주차 (0) | 2023.01.11 |