1. GROUP BY로 범주별 연산 한 번에 끝내기
- Group by는 카테고리 컬럼 지정, Group by를 적어주는 것으로 적용 가능
- 기본 구조
SELECT 카테고리컬럼(원하는컬럼 아무거나),
SUM(계산 컬럼),
FROM
GROUP BY 카테고리컬럼(원하는컬럼 아무거나)
아직 카테고리컬럼..? 일반 컬럼 헷갈린다, 복습 자주 해주기
카테고리별로 계산한다 => 원하는 단위로 나누는것
그룹화하여 그룹단위로 연산한다 << 이게 가장 이해하기 쉬울 것 같다.
- 예시 : 음식 종류별 주문 금액 합계
SELECT cuisine_type,
SUM(price) sum_of_price
FROM food_orders
GROUP BY cuisine_type
sum(price) sum_of_price -> price컬럼의 합계
group by는 아직 이해가 안됨 ㅜㅜ 예시로 공부를 해보자
2. [실습] GROUP BY를 이용하여 카테고리별 연산해보기
2-1. 음식점별 주문 금액 최댓값 조회하기
- Query 를 적기 전에 흐름을 정리해보기
- 어떤 테이블에서 데이터를 뽑을 것인가 - 주문 테이블
- 어떤 컬럼을 이용할 것인가 - 주문 금액, 음식점 이름
- 어떤 조건을 지정해야 하는가 - 없는듯????
- 어떤 함수 (수식) 을 이용해야 하는가 - 최댓값
- 구문으로 만들기
- 어떤 테이블에서 데이터를 뽑을 것인가 - food_orders
- 어떤 컬럼을 이용할 것인가 - price, restaurant_name
- 어떤 조건을 지정해야 하는가
- 어떤 함수 (수식) 을 이용해야 하는가 - max(price)
- 전체 구조로 합치기
SELECT pay_type "결제타입",
MAX(date) "최근 결제일"
FROM payments
GROUP BY pay_type
여기서 왜 group by를 써야하는지에 대해서 생각을 많이 해봤는데,
group by는 그룹화해서 그룹 단위로 연산한다는 느낌이 강한 것 같다.
그럼 이렇게 생각했을때의 예시를 다시보면 음식점별 <<이라고 하였으니까, 음식점 종류를 각각 그룹화하여 그 그룹화한 각각의 음식점들의 주문 금액 중 최댓값을 구한다라고 생각하면 될 것 같다.
2-2. 결제 타입별 가장 최근 결제일 조회하기
- Query 를 적기 전에 흐름을 정리해보기
- 어떤 테이블에서 데이터를 뽑을 것인가 - 결제 테이블
- 어떤 컬럼을 이용할 것인가 - 결제 날짜, 결제 타입
- 어떤 조건을 지정해야 하는가 - 없는것같다
- 어떤 함수 (수식) 을 이용해야 하는가 - 최소
- 구문으로 만들기
- 어떤 테이블에서 데이터를 뽑을 것인가 - payments
- 어떤 컬럼을 이용할 것인가 - pay_type, date
- 어떤 조건을 지정해야 하는가
- 어떤 함수 (수식) 을 이용해야 하는가 - max(date)
- 전체 구조로 합치기
SELECT pay_type "결제타입",
MAX(date)
FROM payments
GROUP BY pay_type
여기서 왜 가장 최근 결제일인데 최솟값이 아닌 최댓값을 써야하는가? 라는 좀 이상한 의문이 들었었다.
근데 생각해보니 가장 최근 날짜일 수록 숫자가 높다, 가장 큰 값을 찾아야 하기때문에 최댓값 !!
그리고 결제 타입별 이니까, 결제 타입별로 그룹화하여 각각의 결제 타입마다 가장 최근 결제일을 조회한다! 그러니까 group by를 사용하는것~!
3. Query 결과를 정렬하여 업무에 바로 사용하기(ORDER BY)
- ORDER BY는 정렬문
- 오름차순(생략) : 숫자가 점점 커지는 순서로 정렬
- 내림차순(desc) : 숫자가 점점 작아지는 순서로 정렬
- 기본 구조
SELECT 카테고리컬럼(원하는컬럼 아무거나),
SUM(계산 컬럼),
FROM
GROUP BY 카테고리컬럼(원하는컬럼 아무거나)
ORDER BY 정렬을 원하는 컬럼 (카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼) 둘 다 가능)
- 예시 : 음식 종류별 주문 금액 합계를 '주문 금액 합계'기준으로 오름차순 정렬
SELECT cuisine_type,
SUM(price) sum_of_price
FROM food_orders
GROUP BY cuisine_type
ORDER BY SUM(price)
이건 문제를 제대로 보면 바로 이해되는 것 같다.
사실 처음부터 group by까지는 이해가 되었고 order by는 정렬하는건데, 뒤에 나오는게 정렬이 되는 기준인 것 같다~!
4. [실습] ORDER BY를 이용하여 데이터를 정렬해보기
4-1. 음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬
- Query 를 적기 전에 흐름을 정리해보기
- 어떤 테이블에서 데이터를 뽑을 것인가 - 주문 테이블
- 어떤 컬럼을 이용할 것인가 - 음식점 이름, 주문 금액
- 어떤 조건을 지정해야 하는가
- 어떤 함수 (수식) 을 이용해야 하는가 - 최댓값, 내림차순
- 구문으로 만들기
- 어떤 테이블에서 데이터를 뽑을 것인가 - food_orders
- 어떤 컬럼을 이용할 것인가 - restaurant_name,price
- 어떤 조건을 지정해야 하는가
- 어떤 함수 (수식) 을 이용해야 하는가 - MAX(price),desc
- 전체 구조로 합치기
SELECT restaurant_name
MAX(price) "최대 주문금액"
FROM food_orders
GROUP BY restaurant_name
ORDER BY MAX(price) desc
이건 완벽히 이해했다 진짜!
4-2. 고객을 이름 순으로 오름차순으로 정렬하기
- Query 를 적기 전에 흐름을 정리해보기
- 어떤 테이블에서 데이터를 뽑을 것인가 - 고객테이블
- 어떤 컬럼을 이용할 것인가 - 고객 이름
- 어떤 조건을 지정해야 하는가
- 어떤 함수 (수식) 을 이용해야 하는가 - 오름차순 정렬
- 구문으로 만들기
- 어떤 테이블에서 데이터를 뽑을 것인가 - customers
- 어떤 컬럼을 이용할 것인가 - name
- 어떤 조건을 지정해야 하는가
- 어떤 함수 (수식) 을 이용해야 하는가 - 오름차순은 생략가능
- 전체 구조로 합치기
SELECT *
FROM customers
ORDER BY name
회고
GROUP BY랑 ORDER BY는 매우매우 중요한 것같다.
그래도 group by, order by 이해했다! 그래도 문제를 자주 풀어보는게 좋을 것 같다.
실습 문제풀때 순서대로 차근차근 오래걸려도 분석하는 식으로 하다가, 나중에 많은 문법들이 익숙해지면 그때 줄여 나가는걸로 해야겠다.
'❄️ 내일배움캠프 7기' 카테고리의 다른 글
[사전캠프/SQL] 상품 주문이 들어왔으니 주문을 처리해봅시다! (0) | 2024.09.06 |
---|---|
[사전캠프/SQL] SQL 구조 마스터, 2주차 숙제 (0) | 2024.09.06 |
[사전캠프/SQL] SUM,AVG,COUNT,MIN,MAX (0) | 2024.09.06 |
[사전캠프/JAVA] JAVA 톺아보기 (1) | 2024.09.05 |
[사전캠프/SQL] 이제 좀 벌었으니 flex 한 번 해볼까요 (0) | 2024.09.05 |