목록Programming Skill/CodingTest (SQL) (34)
Data Blog
📢 본 포스팅에서 사용되는 자료와 출처는 LeetCode 임을 밝힙니다. https://leetcode.com/problems/rank-scores/description/ 해당 문제를 요약하면 다음과 같다.1. 높은 score부터 순위를 매김2. score가 동일하면 동일한 순위를 부여3. 동일한 순위 이후의 순위 번호는 연속된 정수로 지정4. score 기준으로 내림차순 정렬 3 가지 순위 함수는 다음과 같다.ROW_NUMBER() : 동점인 경우도 서로 다른 등수로 계산DENSE_RANK() : 동점인 경우 같은 등수로 계산 + 동점의 등수 바로 다음 수로 순위RANK() : 동점인 경우 같은 등수로 계산 + 동점인 경우의 데이터 세트를 고려해 다음 등수 매김 1. 칼럼 지정하지 않고 순위 매기기다..
📢 본 포스팅에서 사용되는 자료와 출처는 Programmers 임을 밝힙니다. https://school.programmers.co.kr/learn/courses/30/lessons/62284 해당 문제를 요약하면 다음과 같다.1. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회2. cart_id 오름차순 이 문제는 HAVING 절과 IF 함수를 통해 해결할 수 있다. HAVING 절은 개별 행이 아닌 그룹화된 데이터에 대해 필터링할 때 사용된다.이 경우에는 GROUP BY 절에서 사용된 cart_id를 기준으로 우유와 요거트를 동시에 구입한 사람을 필터링하려는 것이 목적이므로, HAVING 절을 사용하는 것이 적절하다. 그렇다면, 우유와 요거트를 동시에 구입한 사람을 어떻게 추출할 수 있을까?..
📢 본 포스팅에서 사용되는 자료와 출처는 HackerRank 임을 밝힙니다. https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=false 해당 문제를 요약하면 다음과 같다.1. total_score는 모든 challenge의 최대 점수 합계2. total_score가 0인 해커는 모두 제외3. hacker_id, name, total_score 출력4. total_score는 내림차순으로 정렬하고, 동일한 total_score일 경우 hacker_id를 오름차순으로 정렬 처음에는 조건 1이 이해가 안 갔는데 Explanation을 보니 이해가 갔다.SELECT *FROM submissionsWHERE hacker..
📢 본 포스팅에 사용된 자료와 출처는 LeetCode에서 제공된 것임을 밝힙니다.https://leetcode.com/problems/capital-gainloss/description/ 해당 문제를 요약하면 다음과 같다.1. Gain(이익)은 주식을 팔아서 발생한 금액2. Loss(손해)는 주식을 사서 발생한 금액3. 총 손익은 모든 주식에 대한 Gain과 Loss의 합 즉, 각 주식의 Gain(Sell)과 Loss(Buy)를 합산하여 총 손익을 계산하는 문제다. 이익이 발생할 때는 +price, 손해가 발생할 때는 -price를 사용해 총 손익을 구할 수 있다.IF 구문에 단순히 + 또는 - 부호를 넣으면 손익을 계산이 가능하다. 최종적으로 IF 구문을 SUM 함수로 감싸면 다음과 같다. SELE..
📢 본 포스팅에 사용된 자료와 출처는 HackerRank에서 제공된 것임을 밝힙니다. https://www.hackerrank.com/challenges/occupations/problem?isFullScreen=true 해당 문제를 요약하면 다음과 같다.1. Occupations 테이블의 occupation(Doctor, Professor, Singer, Actor)을 pivoting (name 알파벳순 정렬)2. occupation 별 최대 이름 개수 보다 적은 열의 빈 셀 데이터는 NULL 값으로 채우기 피벗 작업을 할 때 빠질 수 없는 문법인 CASE WHEN을 활용해 쿼리를 작성했다.이름은 고유한 값이므로 중복 없이 출력될 것이라 생각했고, 특정 직업에 해당하지 않는 값들은 NULL로 처리하여..
📢 본 포스팅에 사용된 자료와 출처는 LeetCode에서 제공된 것임을 밝힙니다. https://leetcode.com/problems/reformat-department-table/description/ 해당 문제를 요약하면 다음과 같다.1. department 테이블의 id와 각 달에 맞는 revenue 출력2. 정렬 고려 x GROUP BY에 사용된 변수 외의 변수를 SELECT 문에서 사용하려면, 해당 변수에는 집계 함수를 적용해야 한다. (이 문제에서는 SUM 함수를 사용)SELECT id , SUM(IF(month = 'Jan', revenue, NULL)) AS Jan_Revenue , SUM(IF(month = 'Feb', revenue, NULL)) AS Feb_Revenu..
📢 본 포스팅에 사용된 자료와 출처는 LeetCode에서 제공된 것임을 밝힙니다. https://leetcode.com/problems/exchange-seats/description/ 해당 문제를 요약하면 다음과 같다.1. 연속된 두 학생마다 id 바꾸기2. 전체 학생 수가 홀수이면 마지막 학생의 id는 바꾸지 않기3. id 오름차순 이 문제의 핵심 포인트는 마지막 id를 어떻게 처리할 것인가인데 조금만 더 생각해 보면 마지막 id가 짝수인 경우에는 전혀 문제가 되지 않는다. 왜냐하면 연속된 두 명의 학생이 딱 맞아떨어지기 때문에 남는 학생 없이 교체가 가능하기 때문이다. 결국에 마지막 id가 홀수일 때가 관건이다. 여기서 마지막 id는 COUNT(*)와 동일하다는 의미이며, id가 홀수라는 것은 i..
📢 본 포스팅에 사용된 자료와 출처는 LeetCode에서 제공된 것임을 밝힙니다. https://leetcode.com/problems/department-highest-salary/description/해당 문제를 요약하면 다음과 같다.1. 부서별 최고 급여를 받은 사람 2. 정렬 고려 x 방법 1) WHERE절 서브쿼리SELECT d.name AS Department , e.name AS Employee , e.salary AS SalaryFROM employee AS e LEFT JOIN department AS d ON e.departmentid = d.idWHERE (e.departmentid, e.salary) IN (SELECT departmentid ..