12.13(금) 본캠프 15일차 기록

Laña·2024년 12월 13일
0
post-thumbnail

QCC(Query Challenge Cycle)

테이블 설명




문제1

  • 전체 테이블 조회해보기
    (밑에 버틀을 누르면 전체 데이터 개수를 파악할 수 있음 - 200개가 default값)
  • 대륙별로 국가가 얼마나 있는지 알아보기 (중복값이나 누락된 값 있는지 확인)
  • 문제가 제시한 조건(전년도 GNP가 없거나, 올해 GNP가 감소한, 10,000,000명이상의 인구 보유 국가)
  • 문제에서 조회하고 싶은 것 (조건에 맞는 국가들의 수)

정답 코드

SELECT COUNT(DISTINCT code) AS country_count
FROM country
WHERE (GNP - GNPOld < 0 or GNPOld is null) 
and population >= 10000000; --정답: 34

나의 풀이와 다시 풀어본 풀이

☠️틀린이유
1. WHERE절의 조건이 아예 잘못 설정되어 있었음!

# 고치기 전
WHERE (GNP IS NOT NULL AND GMP <> 0)
	AND (GNPOld - GNP < 0)
# 고치고 난 후
WHERE (GNPOld IS NULL 
	OR GNP - GNPOld < 0)
  1. 인구 수에 대한 조건이 잘못설정됨
# 고치기 전
HAVING Population >= 1000000 (1,000,000 - 백만)
#고치고 난 후
HAVING Population >= 10000000 (10,000,000 - 천만)

문제2

  • City 테이블 전체 조회해보기
  • City,Country 테이블 결합하기
  • 결합한 테이블에서 필요한 컬럼 조회하기
  • 각 대륙에서 최대 인구를 가진 도시와 국가 찾기
  • 지금까지의 쿼리를 서브쿼리(ranked_cities)로 묶고 확인하기
  • ranked_cities에서 대륙별 랭킹 1위 도시 찾기
  • ranked_cities에서 대륙별 랭킹 1위 도시 인구수 높은 순으로 정렬
  • ranked_cities에서 대륙별 랭킹 1위 도시 인구수 높은 순으로 문제가 조회하고 싶은 것 조회하기 (도시이름,국가,대륙,인구수)

정답 코드1

-- 방법 1. 
SELECT 
    CityName,
    CountryName,
    Continent,
    Population
FROM (
    SELECT 
        c.Name AS CityName,
        co.Name AS CountryName,
        co.Continent,
        c.Population,
        RANK() OVER(PARTITION BY co.Continent ORDER BY c.Population DESC) AS PopulationRank
    FROM 
        city c
    JOIN 
        country co ON c.CountryCode = co.Code
) ranked_cities
WHERE 
    PopulationRank = 1
ORDER BY 
    Population DESC;

정답 코드2

-- 방법 2.  
SELECT 
     c.Name AS CityName,
     co.Name AS CountryName,
     co.Continent,
     c.Population
FROM city c
JOIN country co ON c.CountryCode = co.Code
WHERE c.Population = (
         SELECT MAX(c2.Population)
         FROM city c2
         JOIN country co2 ON c2.CountryCode = co2.Code
         WHERE co2.Continent = co.Continent
     )
ORDER BY c.Population DESC;

정답 코드3

-- 방법 3. 
 SELECT 
     c.Name AS CityName,
     co.Name AS CountryName,
     co.Continent,
     c.Population
 FROM city c
 JOIN 
     country co ON c.CountryCode = co.Code
 JOIN (
     SELECT co.Continent,
         MAX(c.Population) AS MaxPopulation
     FROM city c
     JOIN country co ON c.CountryCode = co.Code
     GROUP BY co.Continent
 	) max_pop 
ON co.Continent = max_pop.Continent 
AND c.Population = max_pop.MaxPopulation
ORDER BY c.Population DESC;

나의 풀이와 다시 풀어본 풀이

☠️틀린이유
1. Population 컬럼 대신 ranking이 들어가벌임...

# 고치기 전
SELECT ..., a.ranking 
# 고치고 난 후
SELECT ..., a.Population

느낀점

QCC.. 너란 녀석... 친해지기 으렵긋다....

해설 강의 들을 때 느꼈던 감정은 딱 저거다. 나름 오류 나진 않았구 잘 했는데;;
그냥 틀렸구나😂😂 하구 느꼈다
다 틀렸긴 했지만 거의 어떤 부분에서 틀렸는지 금방 알아서 다행이라고 생각했다.
그만큼 SQL공부를 나름(?) 열심히 했다고 보여주는것 같아서 말이다ㅎㅎ
오늘 파이썬 라이브세션도 들어서 써야 하는데,, 아직 필기가 더 필요한 부분(클래스 관련)이 있어서🫠🫠 조금 더 적고 정리하면서 적어보려고 한다!
그래서 일단 오늘 진행한 가장 중요했던 QCC만 먼저 풀이를 적었다!

profile
SQL, Python, Code Kata

0개의 댓글