새벽코딩

[PostgresDB-2] 16. 그룹화와 집계(with 마켓컬리 데이터) -GROUP BY 본문

Programming/Postgres DB

[PostgresDB-2] 16. 그룹화와 집계(with 마켓컬리 데이터) -GROUP BY

midnightcoder 2022. 12. 28. 17:32

참고 : https://cloudstudying.kr/lectures/511

 

16 그룹화(GROUP BY) | CloudStudying

# 그룹화(GROUP BY) ## 미션 --- 기존 [마켓컬리 DB](https://cloudstudying.kr/lectures/510)를 가지고, 그룹화 문제를 실습하시오. #### DB 구조도 ![홍팍-SQL-마켓-컬리-DB-스키마-예](http://drive.google.com/uc?export=view&id=

cloudstudying.kr

DB 데이터

 

DB구조도

이전 포스팅에서 만들어 놓은 마켓컬리 데이터로 GROUP BY 실습을 진행해본다.

1. 결제(payment) 테이블을 결제 방법에 따라 분류하고, 각각의 결제횟수를 조회하시오

- GROUP BY 쿼리에서 명시한 column을 기준으로 분류를 한다.

위와 같은 결과를 얻어야됨

SELECT								-- 3
	ptype			AS	"결제 방법",
	COUNT(ptype)	AS	"결제 횟수"
FROM								-- 1
	payments
GROUP BY							-- 2
	ptype

결과

2. 상품(products) 테이블을 보관 타입에 따라 분류하고, 각각의 상품 개수와 평균 가격을 조회하시오

-- 2. 상품 테이블을 보관 타입에 따라 분류하고, 각각의 상품 개수와 평균 가격을 조회하시오

SELECT
	ptype			AS	"상품보관타입",
	COUNT(ptype)	AS "상품개수",
	ROUND(AVG(price)::numeric,2)		AS "평균가격"
FROM
	products
GROUP BY
	ptype

결과

** 여기서 소수 2째자리에서 반올림을 하기위해서

AVG함수를 ROUND로 감싸주었고, numeric,2 에서 소수 몇째 자리까지 나타낼지 명시해주었다.

 

3. 사용자(user)와 주문(orders) 테이블을 조인하고, 사용자 닉네임별 배송 완료 주문수를 조회하시오

 

-- 3. 사용자(user)와 주문(orders) 테이블을 조인하고, 사용자 닉네임별 배송 완료 주문수를 조회하시오
SELECT
	users.nickname	AS "사용자 닉네임",
	COUNT(orders.status) AS "배송 완료 주문 수"	
FROM
	users
JOIN orders ON
	orders.user_id = users.id
		AND
	orders.status = 'DELIVERED'
GROUP BY
	users.nickname

결과

 

 

출처 : 홍팍의 'SQL 데이터 분석, 활용!'