새벽코딩

[PostgresDB-2] 21. 서브쿼리와 IN, ALL, ANY (실습) 본문

Programming/Postgres DB

[PostgresDB-2] 21. 서브쿼리와 IN, ALL, ANY (실습)

midnightcoder 2022. 12. 29. 15:45

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

 

19 필터링과 서브쿼리(IN, ALL, ANY) | CloudStudying

# 필터링과 서브쿼리(IN, ALL, ANY) ## 미션 --- 다음 카페 DB를 가지고, 서브쿼리 관련 필터링 문제를 푸시오. #### 카페 DB 구조도 ![홍팍-SQL-별다방-카페-매출-DB-스키마](http://drive.google.com/uc?export=view&i

cloudstudying.kr

아래 카페 Database를 바탕으로, 문제 풀이 

(테이블 생성 및 데이터 입력은 아래 posting 참조)
https://midnightcoding.tistory.com/64

 

[PostgresDB-2] 10. Relationship (별다방 카페 실습)

참고 : https://cloudstudying.kr/lectures/509 테이블생성 및 데이터 DB 쿼리 CREATE TABLE orders( id SERIAL PRIMARY KEY, --PK status VARCHAR(50), created_at TIMESTAMPTZ ); CREATE TABLE beverages( id SERIAL PRIMARY KEY, name VARCHAR(50), price INT

midnightcoding.tistory.com

카페 DB 구조도

카페 DB 데이터

 

1. 판매량 상위 3개 음료를 다음과 같이 조회하려 한다. 주어진 두 쿼리를 조합하여 이를 구하시오.

-- 먼저 판매량 상위 3개 음료
SELECT
	beverage_id AS "ID",
	SUM(count)	AS "판매량"
FROM
	order_details
GROUP BY
	beverage_id
ORDER BY
	"판매량" DESC
LIMIT
	3
;

SELECT
	beverages.id	AS "ID",
	beverages.name	AS "음료명"	
FROM
	beverages
WHERE
	id IN (
		-- 판매량 상위 3개 음료
		SELECT
			beverage_id
		FROM
			order_details
		GROUP BY
			beverage_id
		ORDER BY
			SUM(count) DESC
		LIMIT
			3
	)
;

2. 아메리카노와 라떼보다 가격이 싼 음료는 다음과 같다. 주어진 쿼리를 조합하여 이를 조회하시오.

--먼저 아메리카노와 라떼의 가격
SELECT
	name	AS	"음료명",
	price	AS	"가격"
FROM
	beverages
WHERE
	name IN ('아메리카노', '라떼')
;
SELECT
	name	AS	"음료명",
	price	AS	"가격"
FROM
	beverages
WHERE
	price < ALL(
		-- 아메리카노와 라떼의 가격
		SELECT
			price	AS	"가격"
		FROM
			beverages
		WHERE
			name IN ('아메리카노', '라떼')		
	
	)
;

 

3. 커피가 아닌 음료들 중, 적어도 한 커피 보다 가격이 비싼 것은 다음과 같다. 주어진 두 쿼리를 조합하여 이를 조회하시오.

-- 모든 커피의 가격
SELECT
	price
FROM
	beverages
WHERE
	btype = 'COFFEE'
;

SELECT
	name	AS	"음료명",
	price	AS	"가격"
FROM
	beverages
WHERE
	btype != 'COFFEE'
		AND
	price > ANY(
		-- 모든 커피의 가격 중 하나라도 크다면
		SELECT
			price
		FROM
			beverages
		WHERE
			btype = 'COFFEE'	
	)
;

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