목록Programming Skill/CodingTest (SQL) (34)
Data Blog
📢 본 포스팅에서 사용되는 자료와 출처는 HackerRank 임을 밝힙니다. https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true 해당 문제를 요약하면 다음과 같다.1. 중앙값이란 상위 50%와 하위 50%를 구분하는 통계량2. lat_n의 중앙값 조회3. 결과는 소수 넷째 자리까지 표시 놀라운 사실은 MySQL에서는 중앙값을 구해주는 함수가 없다는 점이다! 기본적인 세팅은 다음과 같다. 중앙값은 데이터를 크기 순서(ASC 또는 DESC에 상관없이)로 나열했을 때 가운데 순번에 있는 숫자이다. 따라서 이전에 배운 계층형 쿼리인 SET 문을 활용하여 데이터 행에 숫자를 부여하자. 데이터에 ..
📢 본 포스팅에서 사용되는 자료와 출처는 HackerRank 임을 밝힙니다. https://www.hackerrank.com/challenges/symmetric-pairs/problem?isFullScreen=true 해당 문제를 요약하면 다음과 같다.1. Symmetric Pairs란, 두 쌍 (X1, Y1)과 (X2, Y2)에서 X1 = Y2이고 X2 = Y1인 관계 2. Functions 테이블에 있는 모든 Symmetric Pairs를 출력 3. X1 ≤ Y1 조건을 만족하는 쌍만 출력 4. X1 기준으로 오름차순 정렬 조건 1과 조건 3에 해당하는 Symmetric Pairs는 크게 두 가지 경우로 나눌 수 있다.case 1) X1 = Y1인 경우 (ex. (20, 20) & (20, 20..
📢 본 포스팅에서 사용되는 자료와 출처는 HackerRank 임을 밝힙니다. https://www.hackerrank.com/challenges/draw-the-triangle-1/problem?isFullScreen=true 해당 문제를 요약하면 다음과 같다.1. 특수기호 20행 출력 많은 것을 배울 수 있었던 문제 !! 항상 주어진 테이블에서 자료를 추출하는 문제만 다뤘는데, 특수 기호만 출력하는 문제는 생소해서 체크하고 넘어가고자 한다. 우선, 문자열을 반복하는 데 사용되는 함수는 REPEAT(데이터, 반복 횟수) 함수이다.이 문제에서 반복 대상은 *이며, 반복 횟수는 계층형 쿼리를 이용해 표현할 수 있다. 그럼 여기서 FROM 절에 오는 DB는 무엇일까? information_schema.ta..
📢 본 포스팅에서 사용되는 자료와 출처는 Programmers 임을 밝힙니다. https://school.programmers.co.kr/learn/courses/30/lessons/59413 해당 문제를 요약하면 다음과 같다.1. 0시부터 23시까지 각 시간대별 입양 건수를 조회2. 시간대 기준으로 오름차순 정렬 많은 것을 배울 수 있었던 문제 !! 처음 문제를 보고 Lv.4 문제 치고는 쉽다고 생각하며 코드를 작성했는데, 틀려서 당황했다. 문제는 0시~23시까지를 원했지만 내가 작성한 코드는 7시~19시까지만 출력되는 것이었다. 즉, 테이블(DB)에 없는 시간대(row)도 함께 출력해야 하는 문제였던 것이다.SELECT HOUR(datetime) AS hour , COUNT(*) AS coun..
📢 본 포스팅에서 사용되는 자료와 출처는 LeetCode 임을 밝힙니다. https://leetcode.com/problems/delete-duplicate-emails/description/ 해당 문제를 요약하면 다음과 같다.1. 중복된 email 삭제2. 중복된 email 중에서 가장 작은 id를 가진 유니크한 email만 남기기3. SELECT문이 아닌 DELETE문 사용 방법 1) Window FunctionDELETE문의 WHERE 절에 조건을 주면, 해당 조건에 맞는 레코드만 삭제되어 테이블에서 제거된다. 그렇다면 우리가 지워야 할 행은 무엇일까? 중복된 email 중에서 id가 가장 작은 값을 제외한 나머지 행들이다. 이를 해결하기 위해 email별 id에 순위를 매기는 순위 함수를 사용할..
📢 본 포스팅에서 사용되는 자료와 출처는 HackerRank 임을 밝힙니다. https://www.hackerrank.com/challenges/weather-observation-station-15/problem?isFullScreen=true 해당 문제를 요약하면 다음과 같다.1. lat_n이 137.2345보다 작은 값 중 최댓값을 가지는 long_w를 조희2. 결과는 소수 넷째 자리까지 표시 방법 1) 서브쿼리WHERE 절에 137.2345보다 작은 lat_n이라는 조건을 설정하고, SELECT 문에 MAX 함수를 사용하여 조건에 맞는 lat_n을 추출한 후, 그 값과 일치하는 long_w를 구하는 서브쿼리 문제이다. 서브쿼리는 크게 다음 두 가지로 나눌 수 있다.WHERE 조건절의 서브쿼리: ..
📢 본 포스팅에서 사용되는 자료와 출처는 Programmers 임을 밝힙니다. https://school.programmers.co.kr/learn/courses/30/lessons/59042 해당 문제를 요약하면 다음과 같다.1. 입양 간 기록은 있지만 보호소에 들어온 기록이 없는 동물의 id와 이름을 조회2. id 기준으로 오름차순 정렬 방법 1) JOIN앞에서 풀이한 '오랜 기간 보호한 동물 (1)'을 먼저 해결했기 때문에, 자연스럽게 그 방법이 떠올랐다. 입양 간 기록은 반드시 존재해야 하므로, animal_outs를 기준으로 animal_ins를 LEFT JOIN하여 문제를 해결하는 방식이다. -- 방법 1) JOINSELECT o.animal_id , o.nameFROM animal_o..
📢 본 포스팅에서 사용되는 자료와 출처는 Programmers 임을 밝힙니다. https://school.programmers.co.kr/learn/courses/30/lessons/59044 해당 문제를 요약하면 다음과 같다.1. 아직 입양되지 않은 동물 중에서 가장 오래 보호소에 있었던 3마리의 이름과 보호 시작일을 조회 2. 보호 시작일 기준으로 오름차순 정렬 문제에서 언급한 "아직 입양되지 않은 동물 중"이란, animal_ins 테이블에는 존재하지만 animal_outs 테이블에는 존재하지 않는 동물을 의미한다. 즉, animal_ins 테이블과 animal_outs 테이블을 LEFT JOIN 한 후, animal_outs 테이블의 기본 키(pk) 값이 NULL인 동물을 찾아야 한다.SELEC..