목록Programming Skill (52)
Data Blog
📢 본 포스팅에서 사용되는 자료와 출처는 LeetCode 임을 밝힙니다. https://leetcode.com/problems/sales-analysis-iii/description/해당 문제를 요약하면 다음과 같다.1. 2019년 1분기에만 판매된 상품을 출력2. 정렬 고려하지 않음 BETWEEN을 사용해 날짜형에 조건을 주었지만, 잘못된 결과가 나왔다.SELECT p.product_id , p.product_nameFROM product AS p LEFT JOIN sales AS s ON p.product_id = s.product_idWHERE s.sale_date BETWEEN '2019-01-01' AND '2019-03-31';/*["product_id", "product_name..
📢 본 포스팅에서 사용되는 자료와 출처는 Programmers 임을 밝힙니다. https://school.programmers.co.kr/learn/courses/30/lessons/151138 해당 문제를 요약하면 다음과 같다.1. 대여 시작일이 2022년 9월에 속하는 대여 기록2. 대여 기간이 30일 이상인 경우 '장기 대여', 그렇지 않은 경우 '단기 대여'로 분류3. history_id 기준으로 내림차순 정렬 날짜 타입 변수 사이의 일수를 계산할 때 사용하는 함수는 DATEDIFF(시점1, 시점2) = 시점1 - 시점2 이다.예를 들어, 대여 시작일이 9월 1일이고 반납 일자가 9월 3일인 경우 대여 기간은 3일이다.SELECT history_id , car_id , DATE_FOR..
📢 본 포스팅에서 사용되는 자료와 출처는 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..