데이터 분석/SQL 코테 9

[해커랭크] Population Census

다크모드로 인한 배경색 이슈.. (티스토리 배경색 변경이 먹히지 않음) 테이블 두 개를 조인하여 Asia 대륙의 모든 도시 인구의 합을 구하는 문제이다. 문제 분석1. 구해야 하는 것: 모든 CITY의 population의 SUM2. 테이블: CITY와 COUNTRY => 조인 필요 (기준 컬럼: CITY.countrycode = COUNTRY.Code)3. 조건: COUNTRY.continent가 'Asia'인 경우만 문제Given the CITY and COUNTRY tables, query the sum of the populations of all cities where the CONTINENT is 'Asia'.Note: CITY.CountryCode and COUNTRY.Code are mat..

[SQL 코테/Programmars] 그룹별 조건에 맞는 식당 목록 출력하기

문제 설명MEMBER_PROFILE과 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회해주세요.- 회원 이름, 리뷰 텍스트, 리뷰 작성일 출력- 정렬: 리뷰 작성일 기준으로 오름차순, 두 번째로 리뷰 텍스트를 기준으로 오름차순 주어진 테이블- MEMBER_PROFILE 테이블:  MEMBER_ID, MEMBER_NAME, TLNO, GENDER, DATE_OF_BIRTH  회원 ID, 회원 이름, 연락처, 성별, 생년월일 - REST_REVIEW 테이블:  REVIEW_ID, REST_ID, MEMBER_ID, REVIEW_SCORE, REVIEW_TEXT, REVIEW_DATE  리뷰 ID, 식당 ID, 회원 ID, 리뷰 점수, 리뷰 텍스트, 리뷰 작성일  알게 된 것- M..

[SQL코테/HackerRank] Ollivander's Inventory

문제 링크 Ollivander's Inventory | HackerRankHelp pick out Ron's new wand.www.hackerrank.com  문제 요약해리포터와 그의 친구들은 론과 함께 올리밴더의 가게에 있다.마침내 찰리의 오래되고 부서진 지팡이를 바꿀 때가 온 것이다.헤르미온느는 지팡이를 선택할 가장 좋은 기준을 선택하기로 했다. - 필요한 골드는 최소한으로 들 것- non-evil 지팡이일 것- 최대한 많은 힘(power)을 가진 오래된(age) 지팡이일 것 해리포터 친구들을 도와주기 위해id, age, coins_needed, power를 출력하는 쿼리를 짜 보자.  문제 조건 정리- coins_needed는 최솟값(MIN)- is_evil이 0- power 기준으로 내림차순 정..

[SQL코테/HackerRank] The Report

문제 링크 The Report | HackerRankWrite a query to generate a report containing three columns: Name, Grade and Mark.www.hackerrank.com  문제 요약1. Name, Grade, Mark 출력2. 등급이 8 미만이면 이름을 NULL로 출력3. 출력 결과는 등급 기준 내림차순, 같은 등급이면 이름 사전 순,    8등급 미만의 경우 등급 기준 내림차순, 같은 등급이면 원점수(Mark) 기준 오름차순  풀이 과정- 등급이 8등급 미만이면 이름을 NULL로 출력하는 부분은 IF로 처리했다. - 조인 문제였지만 테이블 상에서 겹치는 컬럼이 없어서 조인을 어떻게 해야 할지 고민되었다.근데 그냥 'JOIN' 키워드 없이 F..

[SQL코테/HackerRank] Weather Observation Station 20

문제 링크 Weather Observation Station 20 | HackerRankQuery the median of Northern Latitudes in STATION and round to 4 decimal places.www.hackerrank.com  문제 요약1. lat_n의 중앙값(median)을 구한다.2. 반올림하여 4자리까지 나타낸다.  풀이 과정중앙값은 전체 수치 중 위치 상으로 가장 가운데에 있는 값이다. 처음에 자바스크립트처럼 '인덱스를 구해서 중간 값을 찾아야 하나,인덱스가 1부터 시작하는 파생 컬럼을 만들어야 하나' 여러 가지 고민을 했다. mysql로 중앙값 구하는 방법을 찾아보니 oracle로는 median()이라는 메서드로 바로 구할 수 있고mysql은 PERCENT..

[SQL코테/HackerRank] Contest Leaderboard

문제 링크 Contest Leaderboard | HackerRankGenerate the contest leaderboard.www.hackerrank.com  문제 요약1. hacker_id, name, hacker가 각 challenge에서 얻은 최고점들의 합(총점)을 출력2. hacker가 얻은 총점이 0인 경우는 결과에서 제외3. 총점 내림차순, 동점일 경우 hacker_id 오름차순 정렬  풀이 과정문제는 다 이해했는데 코드가 잘 나오지 않았다. 정답 코드와 비교해보니 FROM절 서브쿼리를 통해hacker가 각 challenge에서 얻은 최고점들의 합을 구하는 테이블을 먼저 만든 뒤그 테이블을 나머지 다른 하나의 테이블인 H.Hackers와 JOIN 해야 했다. hacker_id와 name은 ..

[SQL코테/HackerRank] Weather Observation Station 17

문제 링크 Weather Observation Station 5 | HackerRankWrite a query to print the shortest and longest length city name along with the length of the city names.www.hackerrank.com 문제점다음처럼 코드를 짜서 Submit은 통과했지만이보다 더 좋은 코드가 있을 것 같아서 찾아보았다. 내가 작성한 코드SELECT city, LENGTH(city) FROM stationWHERE LENGTH(city) = ( SELECT MIN(LENGTH(city)) FROM station)ORDER BY LENGTH(city), cityLIMIT 1;SELECT city, LENGTH(..

[SQL코테/HackerRank] Weather Observation Station 17

문제 바로가기 풀이 과정 Tip: WHERE에는 그룹 함수(MIN)를 사용할 수 없다.  2가지 방법으로 풀 수 있다.  1. 서브쿼리 처음에 서브쿼리로 작성한 후 에러가 났는데확인해보니 WHRER 다음에 서브쿼리와 비교할 컬럼명(lat_n =)을 넣지 않아서였다. 컬럼명을 넣고 다시 수정했더니 정답 처리되었다.SELECT ROUND(long_w, 4)FROM stationWHERE lat_n = ( -- 이 라인에서 'lat_n ='을 빠뜨림 SELECT MIN(lat_n) FROM station WHERE lat_n > 38.7780);   2. ORDER BY + LIMIT  MIN, MAX를 '대체'하는 구문으로 MIN, MAX '대신' 쓴다.(= ORDER BY + LIMIT..

[SQL코테/HackerRank] Weather Observation Station 5

문제 바로가기   풀이 과정1. 최소 최대 라고 해서 ORDER BY와 LIMIT 1을 바로 떠올렸다.하지만 여기에 불필요한 MIN, MAX를 추가하다가 GROUP BY, HAVING까지 사용하게 되었다. => ORDER BY + LIMIT 구조 자체가 최소값, 최대값을 뽑기 위한 것이므로 MIN, MAX 불필요  2. 문제 맨 아래 '쿼리를 2개 분리해서 써도 된다'는 내용을 보지 못하고 UNION까지 시도 => 느낀 점: 해커랭크는 문제의 맨 아래 문장을 항상 확인  정답 코드SELECT city, LENGTH(city)FROM STATIONORDER BY LENGTH(city), cityLIMIT 1;SELECT city, LENGTH(city)FROM STATIONORDER BY LENGTH(ci..