상세 컨텐츠

본문 제목

PostgreSQL Ch 04. 실습 예제

SQL

by seonjaechoi 2023. 10. 13. 17:51

본문

반응형

PostgreSQL Ch 04. 실습 예재

" PostgreSQL 실습 예제 풀이 시간 "


▣ Question 1.

 ① 2015년 평균 기대 수명보다 1.15배 높은 모든 데이터를 조회하자.

 ② 사용할 데이터 테이블은 populations 입니다.

 

Q1. 2015년 평균 기대 수명보다 1.15배 높은 모든 데이터를 조회하자.  >>> 답안 예시

 

▶ Qusetion1. 풀이 코드 열람하기

더보기

▣ 필자 풀이 코드

-- 답안 제출
SELECT *
FROM populations
WHERE life_expectancy >= (
	SELECT AVG(life_expectancy) * 1.15 AS AVGE
	FROM populations
	WHERE year = 2015
);

 

▣ 강사님 풀이 코드

-- 답안 코드
SELECT * 
FROM populations
WHERE life_expectancy > 1.15 * (SELECT 
				AVG(life_expectancy) 
				FROM populations 
				WHERE year = 2015)
;

 


 

▣ Question 2.

 ① countries 테이블에서 Captial 컬럼과 매칭되는 cities 테이블의 필드를 조회한다.

 ② urbanarea_pop 내림차순을  기준으로  정렬한다.

 ③ 사용할 데이터 테이블은 countries, citiescities 입니다.

 

countries 테이블에서 Captial 컬럼과 매칭되는 cities 테이블의 필드를 조회한다. urbanarea_pop 내림차순을  기준으로  정렬한다. >>> 답안 예시

 

▶ Qusetion2. 풀이 코드 열람하기

더보기

▣ 필자 풀이 코드 & 강사님 풀이 코드

-- 답안 제출 & 답안 코드
SELECT
	name
	, country_code
	, urbanarea_pop::INTEGER
FROM  cities
WHERE name IN(SELECT capital FROM countries)
ORDER BY urbanarea_pop DESC
;

 


 

▣ Question 3.

 ① countries 테이블과, cities 테이블을 서로 조인하여 국가별 도시 갯수를 계산한다.

 ② INNER JOIN을  서브쿼리로  변환하기

 ③ 사용할 데이터 테이블은 countries, citiescities 입니다.

-- INNER JOIN 서브쿼리 변환
SELECT 
	co.name AS country
	, COUNT(*) AS cities_num 
FROM cities ci
INNER JOIN countries co 
ON co.code = ci.country_code 
GROUP BY country
ORDER BY cities_num DESC, country;

countries 테이블과, cities 테이블을 서로 조인하여 국가별 도시 갯수를 계산한다. INNER JOIN을  서브쿼리로  변환하기 >>> 답안 예시

 

▶ Qusetion3. 풀이 코드 열람하기

더보기

▣ 필자 풀이 코드

-- 답안 제출
SELECT
	country_name AS Country
	, COUNT(*) AS cities_num
FROM (
	SELECT country_name
	FROM countries A
	INNER
	JOIN cities B
	ON A.code = B.country_code
) A
GROUP BY country
ORDER BY cities_num DESC
;

 

 강사님 풀이 코드

-- 답안 코드
EXPLAIN
SELECT 
	A.country_name AS country, 
	(SELECT COUNT(*) 
	 FROM cities 
	 WHERE A.code = cities.country_code) AS cities_num
FROM countries A
ORDER BY cities_num DESC, country;

 


 

▣ Question 4.

 ① 2015년, 각 대륙별 가장 높은 인플레이션을 기록한 국가와 인플레이션을 조회한다.

 ② 테이블명 : countries,  economies

 

2015년, 각 대륙별 가장 높은 인플레이션을 기록한 국가와 인플레이션을 조회한다. >>> 답안 예시

 

▶ Qusetion4. 풀이 코드 열람하기

더보기

▣ 필자 풀이 코드

-- 답안 제출
SELECT
	country_name AS name
	, continent
	, inflation_rate
FROM (
	SELECT
		A. code
		, country_name
		, continent
		, year
		, inflation_rate
		, RANK() OVER(PARTITION BY continent ORDER BY inflation_rate DESC) AS RNK
	FROM countries A
	INNER
	JOIN economies B
	ON A.code = B.code
	WHERE inflation_rate is NOT NULL
	AND year = 2015
) A
WHERE RNK = 1
ORDER BY 1
;

 

 강사님 풀이 코드

SELECT 
	country_name AS name
	, continent
	, inflation_rate
FROM countries A
INNER
JOIN economies B
	ON A.code = B.code
WHERE year = 2015 AND inflation_rate IN
	(SELECT MAX(inflation_rate)
	FROM (SELECT
			country_name
			, continent
			, inflation_rate
		FROM countries A
		INNER
		JOIN economies B
			ON A.code = B.code
		WHERE year = 2015
		) A
	GROUP BY continent)
;

끝. 수고하셨습니다.

관련글 더보기