0. 개요

오늘 QCC 테스트를 보고 이번에 피드백 받은거랑 다른 함수를 사용해서 다른 문제 풀이를 해보려고 한다.


1. QCC 테스트

1번 문제는 확인해보자면

 ➡️ 전년에 비해서 올해 GNP가 낮은 국가들을 조회한다.
 ➡️ 인구수가 1천만명 이상
 ➡️ 단, 전년 대비 GNP 가 Null 혹은 0 인 경우는 제외한다.

이 세가지 조건을 갖춰야 한다.

이를 하나하나 내가 아는 조건을 맞춰본다면 이렇게 할 수 있을 거 같다.

  ➡️ 조건 1. GNP < GNPOLD 혹은 GNL-GNPOLD < 0 (음수값) 
  ➡️ 조건 2. Population >= 10000000
  ➡️ 조건 3. GNPOLD IS NOT NULL

근데 실수한게 있었다. GNPOLD IS NOT NULL 써야하는데, 실수로 GNP IS NOT NULL 로 썼다. 시간에 쫓겨서 그래서 그 점이 몹시 아쉬웠다. 일단 내가 쓴 건 이거다.

SELECT COUNT(*) AS COUNTRY_COUNT
FROM country
WHERE GNPOLD > GNP AND GNPOLD IS NOT NULL AND POPULATION >= 10000000

##여기서 GNPOLD is not null 로 교체하면 정답

그래서 값은 27이 된다! 일단 이게 정답이지만 GNPOLD 이부분에서 틀렸으니까 아마 오답처리 되지 않을까 생각한다.

 

2번 문제는 확인해본다면...

  ➡️ 각 District 별 평균 인구를 계산한다. (단, 반올림해서 정수로 변환)
  ➡️ 도시가 3개 이상 존재하는 District 만 포함해야 한다
  ➡️ 결과는 평균 인구수를 기준으로 내림차순 정렬해야 한다

각 문제를 계산한다면... 내가 아는 한도에서

  ➡️ Round(Avg(Population),0) 로 써봤다.
    ** Round 함수는 Round(값, 숫자 혹은 빈칸)
       소수점 반올림 : 0
       소수점 반올림 : 1,2,3
       정수 반올림 : -1,-2,-3
  ➡️ 일단은 나는 COUNT(Name) 으로 했는데, 살펴보니까... District 로 해야되더라...
  ➡️ Average_population desc ;

SELECT District, ROUND(AVG(Population),0) AS Average_population
FROM city
GROUP BY District
HAVING COUNT(Name) >=3
ORDER BY Average_population DESC ;

일단은 이렇게 썼는데 아쉬운 점이 있었다. 답은 그대로더라도 읽는 과정에서는 다른거니까.

SELECT District, ROUND(AVG(Population),0) AS Average_population
FROM city
GROUP BY District
HAVING COUNT(District) >=3
ORDER BY Average_population DESC ;

값은 이렇게 나왔다. 둘다 돌려도 동일하긴 하지만... 어쩔 수 없지 아마 또 Incorrect 뜰거 같다..

이게 많이 어려웠다. 그리고 자꾸 바보같은 걸로 틀리고.. 난 바보같다 ㅜ

  ➡️ Contient 중에서 MAX 값을 사용한다.
  ➡️ 각 대륙별로 인구가 많은 도시 중 city 테이블의 population 을 가져온다.
  ➡️ city_name Is not null
  ➡️ Max(population) Desc ;

이건 무조건 오답이긴 하지만 나 나름대로 써보려고 했다.

SELECT B.name AS CITY_NAME, A.Name AS COUNTRY_NAME,A.continent,Max(C.population) AS Population
FROM country A INNER JOIN city B ON A.code = B.countrycode 
               INNER JOIN (SELECT name,countrycode, Max(population) as Population FROM city GROUP BY Population) AS C ON A.code = C.countrycode
WHERE B.name is not null
GROUP BY A.continent
ORDER BY Population desc;

뭄바이가 나와야하는데, 맨 앞의 값만 나와버렸다. 
그러니까 1, 2, 3 에 있는건 지금의 popluation 과 아예 별개의 값이다.

이거랑 비슷한 걸 풀었던 기억이 나서 응용하고 싶었는데 생각보다 어려웠다. 문제는 이거고, 답은 다음과 같이 작성했다.

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
AND PRICE IN (SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY)
GROUP BY CATEGORY
ORDER BY MAX_PRICE DESC

이 문제도 MAX_PRICE 랑 실제의 제품이랑 잘 안맞게 되서 보면...
PRICE IN (SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY)로 묶은 내용을 볼 수 있다.
저걸 응용하고 싶었는데.. 잘 안됐다.

사실은 with 구문과 랭크 함수를 써야했지만, 일단은 기존 식이 있으니까 써보려고 한다.

근데 일단은 답이 나오고 나서 그 후로 좀 다시 해보려고... ㅜㅜ 혼자 스스로 푸는데 이게 마냥 쉽지 않다. QCC 해설도 올려주면 좋으련만...


일단은 오늘도 정답은 0개! 근데 별수없지...
내가 개발자는 아니더라도 코딩에 익숙해지는 건 중요하니까. 일단은 순서가 중요하니까.

요근래 SQL 코드카타를 풀면 좀 많이 실력이 늘었다. 어느 정도 푸는 것에 많은 시간이 걸리지는 않았다. 앞으로 다시 SQL 중에 점검할게 있으면 점검하고 파이썬 라이브 세션을 들으면서 다시 봐야겠다.

MERGE JOIN 도 파이썬도 동일하게 들어가니까 그부분을 오늘 TIL 정리하면서 해보려고 한다.

myo