🔗링크
문제 1) 글로벌 확장 기회 발굴
-- 전년대비 GNP감소
-- GNP, GNPOld 필요
-- 인구 1천만명 이상
-- 이전 연도 GNP 0이거나 NULL 제외
SELECT COUNT(DISTINCT Code)
FROM country
WHERE GNPOld IS NOT NULL
AND GNPOld <> 0
AND GNP < GNPOld
AND Population >= 10000000
SELECT COUNT(DISTINCT code) AS country_count
FROM qcc.country
WHERE GNPOld <> 0
and GNP - GNPOld < 0
and population >= 10000000
엄청나게 크게 다른 점은 없음!
나는 GNP < GNPOld
라고 표현한 부분을
튜터님은 GNP - GNPOld <0
이라고 표현하심
이 말은 즉 GNPOld - GNP > 0
이라고 해도 되는 것
문제 2) 도시개발구역 인구 분석
cnt_city
가 포함이 되면 안 되니까 재시도SELECT District,
ROUND(AVG(Population)) AS AVERAGE_POPULATION,
COUNT(1) AS cnt_city
FROM city
GROUP BY District
HAVING cnt_city >= 3
ORDER BY AVERAGE_POPULATION DESC
Having
절을 써주면 되지 않을까 생각해서 이렇게 적었는데 오류가 생김!SELECT District,
AVERAGE_POPULATION
FROM
(
SELECT District,
ROUND(AVG(Population)) AS AVERAGE_POPULATION,
COUNT(*) AS cnt_city
FROM city
GROUP BY District
ORDER BY AVERAGE_POPULATION DESC
)a
HAVING cnt_city >= 3
여기서 동진님이 설명을 해주셨는데
SELECT COUNT(1) -- 🟡
FROM
(
SELECT District,
ROUND(AVG(Population)) AS AVERAGE_POPULATION
FROM city
GROUP BY District
HAVING COUNT(1) >= 3 -- 🔴
ORDER BY AVERAGE_POPULATION DESC
)a
🔴 여기서의 HAVING절은 눈에 보이진 않지만 COUNT(1)이라는 컬럼이 뒤에 더 붙어있는 것
🟡 서브쿼리로 감싸서 COUNT(1)을 할 경우 사용할 수 없음 SELECT 절에 없어서!
having
은 group by
에 의존한다!!! 잊으면 죽는다👊
-- 행정구역 내 도시들의 평균 인구 수
-- 각 구역 별 평균 인구 계산 > 반올림
-- 도시가 3개 이상 존재하는 District
-- 평균 인구수 기준 내림차순 정렬
SELECT District,
AVERAGE_POPULATION
FROM
(
SELECT District,
ROUND(AVG(Population)) AS AVERAGE_POPULATION,
COUNT(1) AS cnt_city
FROM city
GROUP BY District
ORDER BY AVERAGE_POPULATION DESC
)sub
WHERE cnt_city >=3
SELECT district, ROUND(AVG(Population)) AS average_population
FROM qcc.city
GROUP BY district
HAVING COUNT(ID) >= 3
ORDER BY average_population DESC
문제 3) 인기도시 타겟 마케팅
🔗유사한 문제 - 즐겨찾기가 가장 많은 식당 정보 출력하기
-- 각 대륙에서 인구가 가장 많은 도시 출력
-- 대륙 별 / 가장 인구가 많은 도시 < RNAK? ROW_NUMBER? 해당 도시만 조회
-- 도시 정보가 없는 대륙 제외
-- 인구 기준으로 내림차순 정렬
WITH rnk_ct AS(
SELECT ct.Name AS CITY_NAME,
ct.CountryCode,
ct.District
ct.Population,
co.Name AS COUNTRY_NAME
ROW_NUMBER() OVER(PARTITION BY continent ORDER BY Population DESC) AS rnk
FROM city ct
JOIN country co ON ct.CountryCode = c.Code
)
SELECT CITY_NAME, COUNTRY_NAME, Continent
FROM rnk_ct
WHERE rnk = 1
ORDER BY Population DESC;
WITH rnk_ct AS(
SELECT ct.Name AS CITY_NAME,
ct.CountryCode,
ct.District, -- 쉼표 빠짐
ct.Population,
co.Name AS COUNTRY_NAME,
co.Continent, -- 빠짐
ROW_NUMBER() OVER(PARTITION BY co.Continent ORDER BY ct.Population DESC) AS rnk
FROM city ct
JOIN country co ON ct.CountryCode = co.Code
) -- `c.Code`로 잘못 작성함
SELECT CITY_NAME, COUNTRY_NAME, CONTINENT, POPULATION -- 빠짐
FROM rnk_ct
WHERE rnk = 1
ORDER BY Population DESC;
해설세션에서 잘 작성했는데 아쉽다고 하셨다
정신체려이각박한세상속에서
SELECT
CityName AS city_name,
CountryName AS country_name,
Continent AS continent_name,
Population AS population
FROM (
SELECT
c.Name AS CityName,
co.Name AS CountryName,
co.Continent,
c.Population,
ROW_NUMBER() OVER (PARTITION BY co.Continent ORDER BY c.Population DESC) AS PopulationRank
FROM qcc.country co
JOIN qcc.city c ON c.CountryCode = co.Code
) ranked_cities
WHERE
PopulationRank = 1
ORDER BY
Population DESC
Name
이라는 컬럼명이 겹치기때문에 아예 AS
로 별명을 지어서 구분하셨다 SQL - 즐겨찾기가 가장 많은 식당 정보 출력하기
SQL - 식품분류별 가장 비싼 식품의 정보 조회하기
SQL - 모든 레코드 조회하기
Python - 나누어 떨어지는 숫자 배열
Python - 음양 더하기
SQL 코드카타 47-49✅
QCC 참여+해설정리
Python 코드카타 25-26
5주차 복습✅
기초 트레이닝 Day4❌
개인과제 제출✅
전처리&시각화 1-2주차✅
오늘도 어김없이 TIL에 등장하는 등장동진님;; 마지막에 시각화 부분도 엄청나게 정리를 열심히 하셨다고 하셔서 구경갔는데 걍 레전드🥲
QCC 점수는 오늘 2/3
3번 문제는 시간이 모자라서 마음이 급했나 컬럼명도 제대로 안 맞추고 쉼표도 빼먹고 아주 난리부르스가 났다 하하 뭐 대차게 틀렸으면 그러려니 하겠는데 쉬운 걸로 틀렸다고 하니까 마음이 아프다🥲 나도 합법도박장 가서 경주마가 되고 싶다 이거야 대빵만하게 적힌 내 닉네임 채찍피티를 널리널리 알리고 싶다 이거야!!!!!!!!! 친구가 이렇게 얘기해서 웃겼다
(다솜님 떠나면 나 죽을게)