항해99/개강 준비 과정 - 필수 트랙

엑셀보다 쉬운 SQL - 2주차(2024-01-25)

nsean 2024. 1. 25. 19:28

이번 주차에 배울 내용

  • 통계: 최대 / 최소 / 평균 / 개수
  • 동일한 범주의 데이터를 묶어주는 Group by
  • 데이터를 정렬해보자: Order by

1주차에서 배운 내용만을 사용하여 과목별 신청자수를 구한다면, 그 코드는

select count(*) from orders
where course_title = "앱개발 종합반";

select count(*) from orders
where course_title = "웹개발 종합반";

이렇게 두 번 반복해야된다. 이렇게 두번만 반복해도 되는 경우가 있지만, 일반적인 데이터베이스에서는 이보다 훨씬 다양한 종류의 변수들이 있을 것이기에, Group by 를 사용해줘야 한다.

select course_title, COUNT(*) from orders o
group by course_title ;

 

SQL 쿼리가 실행되는 순서

SQL에서 쿼리가 실행되는 순서를 아는 것은 정말 중요하다고 한다.

위의 코드의 경우 from-> group by-> select 순서로 실행된다.

 

group by를 활용하여 다양한 경우에서의 통계를 구할 수 있는데, 

  • count(*)
  • min()
  • max()
  • avg()
  • sum()

등이 이에 해당된다.

 

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;

위의 경우 오름차순, 아래의 경우 내림차순이다

또한 실행되는 순서는 from → group by → select → order by 순으로 실행된다.

 

order by는 결과물을 정렬해주는 것이기 때문에 가장 나중에 실행된다.

 

다음은 쿼리문 작성을 할 때의 팁이라고 한다.

  1. show tables로 어떤 테이블이 있는지 살펴보기
  2. 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
  3. 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
  4. 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
  5. 범주별로 통계를 보고싶은 필드를 찾기
  6. SQL 쿼리 작성하기!

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

SELECT payment_method , COUNT(*) FROM orders o 
WHERE o.email LIKE '%@naver.com' AND o.course_title = '앱개발 종합반'
GROUP BY payment_method 
ORDER BY COUNT(*) DESC