본문 바로가기

SQL

(20)
[SQL] SQL로 이진트리 탐색하기(HackerRank - Binary Tree Nodes 문제) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 SQL로 이진트리를 탐색하는 문제를 풀어보려 한다. 문제 원본은 여기를 클릭해 확인하자. 우선은 이진트리(Binary Tree)는 다음과 같은 특성을 갖고 있다. $Leaf$ 노드를 제외하고 $Root$ 노드를 포함한 모든 부모(Parent) 노드는 자신의 노드값 기준으로 왼쪽은 무조건 작은 값, 오른쪽은 무조건 큰 값이 존재하는 트리 구조라고 할 수 있다. 단, 부모 노드에 자식 노드가 하나만 존재하는 것이 가능하다. 텍스트로 이해하기 쉽지 않을 수도 있기에 이진트리의 구조를 사진으로 가져와 보았다. 이제 이진트리가 무엇..
[SQL] SQL로 소수(Prime Number) 출력하기(HackerRank - Print Prime Numbers 문제) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 SQL로 소수(Prime Number)를 출력해보는 문제를 풀어보려고 한다. 해당 문제를 풀기 위해서 MySQL의 Stored Procedure를 참고해서 풀기도 했지만 일반적인 쿼리문을 통해 해결할 수 있는 풀이를 소개하기 위해 Discussion의 다른 분의 뛰어난 풀이를 참고했다. 하지만 문제를 해결해나가면서 MySQL의 Procedure라는 것에 대해 알게 되었고 Procedure 안에서 WHILE, LOOP, ITERATE, IF 등 다양한 문법을 사용할 수 있다는 사실도 알게 되었다. 이에 대해 자세히 알고 싶..
[SQL] HackerRank - Placements 문제 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 HackerRank의 Placements 문제를 풀어보려고 한다. 문제 원본은 여기를 클릭해 확인해보자. 다른 문제들 보다는 수월하게 해결했기 때문에 문제 풀이에 활용한 아이디어와 정답 SQL 구문만 제시하고 간단하게 포스팅을 마치려 한다. 문제에서 요구하는 사항은 다음과 같다. Write a query to output the names of those students whose best friends got offered a higher salary than them. Names must be ordered by th..
[SQL] HackerRank - SQL Project Planning 문제 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 HackerRank의 SQL Project Planning 문제를 풀어보자. 이번 문제에서 요구하는 사항은 필자가 직접 설명하기 보다는 문제의 원본을 읽어보는 것이 더 수월할 것으로 판단된다. 문제 원본은 여기를 클릭해 살펴보자. 해당 문제를 풀어보려다가 결국 풀지 못하고 Discussion을 살펴보았는데, 마치 SQL문제인데 데이터 속에서 패턴을 발견해야 하는 알고리즘 문제처럼 느껴졌다.. 문제를 풀기 위한 아이디어는 다음과 같다. Start_Date 중 End_Date에는 없는 Start_Date는 각 연속적이지 않고..
[SQL] HackerRank - Contest Leaderboard 문제 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 HackerRank의 Contest Leaderboard 문제를 풀어보려고 한다. 문제 원본은 여기를 클릭해 확인해보고 문제에서 요구하는 사항을 확인해보자. The total score of a hacker is the sum of their maximum scores for all of the challenges. Write a query to print thehacker_id,name, and total score of the hackers ordered by the descending score. If more th..
[SQL] MySQL에서는 안되는 풀이(HackerRank - The PADS 문제) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅은 HackerRank 사이트의 The PADS 문제를 풀어보려고 한다. 난이도는 Medium 이지만 예상 외로 쉽게 해결했다. 하지만 어렵지 않은 문제임에도 블로그에 게시하는 이유는 바로 MySQL이 아닌 MS SQL을 이용해 해결했기 때문이다. 즉, MySQL 문법으로는 해결할 수 없기 때문이다. 문제 원본은 여기를 클릭해 살펴보고 문제에서 요구하는 사항을 확인해보자. 문제는 다음과 같은 2가지 결과를 출력하길 원한다. 주어진 테이블의 Name을 알파벳 순서로 정렬해 출력하는데, 끝에 각 Name에 해당하는 Occupatio..
[SQL] HackerRank - Ollivander's Inventory 문제풀이 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 HackerRank의 Olivander's Inventory 문제를 풀어보려고 한다. 해당 문제는 필자가 약 1시간 동안 쩔쩔 매다가 몇 번의 시도 끝에도 풀리지 않아서 문제의 Discussion을 보고 이해한 문제다. 개인적으로 문제가 해리포터와 연관된 이야기로 나오길래 오히려 문제가 더 잘 읽히지도 않았고 헷갈렸다.(Discussion을 보니 몇 사람들이 문제 설명이 명시적이지 않다고 불만을 제기한 의견들도 꽤 되었다..) 이 문제를 통해서 배우게 된 점은 서브 쿼리를 작성할 때 메인 쿼리에서 활용한 테이블의 칼럼을 ..
[SQL] HackerRank - Top Competitors 문제풀이 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 해커랭크 사이트의 Top Competitors 문제를 풀이해보자. 문제 원본은 여기를 클릭해 읽어보자. 문제에서 주어진 테이블들은 문제 원본을 살펴보고 여기에서는 어떤 출력의 내용은 요구하는지에 대해서 이해해보자. Julia just finished conducting a coding contest, and she needs your help assembling the leaderboard! Write a query to print the respectivehacker_idandnameof hackers who achie..
[SQL] 연속적인 JOIN 구문으로 해결하기(HackerRank - New Companies 문제) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 해커랭크 문제의 New Companies 문제 풀이에 대해 소개하려고 한다. 필자가 직접 풀이했던 연속적인 JOIN 구문을 사용하는 방법과 Discussion에 존재했던 다른 분의 JOIN 구문을 사용하지 않은 풀이도 소개해보려 한다. 이번 문제는 주어진 테이블 개수도 여러개이기 때문에 포스팅에서 소개한다면 너무 번잡해질 것 같아 문제에 대한 이해는 원본 문제인 여기를 참고하자. 원본 문제를 읽고 나면 문제에서 요구하는 사항이 정확히 무엇인지 파악할 수 있다. 각 Company의 Company_code, Founder, ..
[SQL] MySQL로 중앙값(Median) 찾아내기 - (HackerRank - Weather Observation Station 20 문제) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 MySQL을 활용해 Median값을 출력해보는 문제를 풀어보려 한다. Median이란, 잘 알다시피 중앙값을 의미하며 보통 데이터 분포가 치우쳐져 있을 때 데이터의 대푯값으로 자주 설정하는 척도이다. 이런 중앙값을 SQL로 계산하는 방법에 대해 알아보자. 문제의 원본은 여기를 참조하자. 문제의 요구사항은 다음과 같다. A median is defined as a number separating the higher half of a data set from the lower half. Query themedianof theN..
[SQL] CASE WHEN으로 Pivot Table 만들기(HackerRank - Occupations 문제) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 MySQL의 CASE WHEN 구문으로 Pivot Table을 만들어 문제를 해결하는 방법에 대해 소개하려 한다. 활용하려는 문제는 HackerRank 사이트의 Occupations 문제이다. 원본은 여기를 참조하자. 우선 Pivot table이란 무엇일까? 직관적으로 말하면 Row에 있는 값들을 Column으로 변형한 테이블을 말하는데, Pandas의 pivot(), pivot_table() 메소드를 활용해본 사람들에겐 익숙할 것이다. Pivot table의 형태는 다음과 같다. 그렇다면 이것을 CASE WHEN 구문으로..
[SQL] 복잡한 서브쿼리 문제풀이(HackerRank - Challenges 문제) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 여러가지 서브쿼리를 이용해야 해결할 수 있는 HackerRank의 Challenges 문제를 같이 풀어보려고 한다. 우선 문제 설명과 출력 형태를 살펴보자. 문제 원본을 살펴보려면 여기를 클릭해보자. 문제 설명은 다음과 같다. Julia asked her students to create some coding challenges. Write a query to print the hacker_id, name, and the total number of challenges created by each student. Sort..
[SQL] Second Highest Salary(Leetcode - 176번) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 Leetcode임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 Leetcode 사이트를 방문해 보세요! 이번 포스팅은 Leetcode 176번 문제인 'Second Highest Salary' 문제를 풀어보려 한다. 문제의 난이도는 비교적 어렵지 않지만 이 문제를 포스팅에 게시하는 이유는 LIMIT 과 OFFSET 문법을 사용 시 주의해야 할 점을 소개하기 위함이기 때문이다. 1. 서브쿼리를 사용해서 풀기! 우선 문제에서 요구하는 것은 문제 이름에도 나와 있듯이 2번째로 가장 높은 Salary를 출력하기만 하면 된다. 문제에서 주어진 테이블 형태를 자세히 들여다보자. 2번째로 가장 높은 Salary를 출력하기 위한 정석의 방법은 "1번째로 가장 높은..
[SQL] HAVING, WHERE, FROM 절에 서브쿼리 이용하기(HackerRank - Top Earners 문제) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 HackerRank 임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 HackerRank 사이트를 방문해 보세요! 이번 포스팅에서는 HackerRank 사이트의 SQL 문제중 'Top Earners' 문제에 대한 서로 다른 3가지 풀이방법에 대해 소개해보려 한다. 이 3가지 풀이의 공통점은 서브쿼리를 사용했다는 점인 반면 차이점은 서브쿼리를 SQL 구문의 어느 위치 즉, HAVING 다음인지, WHERE 다음인지, FROM 다음인지에 따라 조금씩 달라진다는 점이다. 우선 풀이할 문제와 문제가 요구하는 사항에 대해서 알아보자. 문제 원본을 보기 위해서는 여기를 클릭해 확인해보자. 위 테이블이 주어졌을 때, 문제사항은 다음과 같다. We define an..
[SQL] MySQL - Window Function으로 문제풀기(Leetcode - 180, 184, 185번) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 Leetcode임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 Leetcode 사이트를 방문해 보세요! 이번 포스팅에서는 MySQL 8.0 버전부터 호환이 가능한 Window Function을 이용해 문제를 풀어보자. 만약 MySQL 8.0 이하 버전이라면 MSSQL을 활용해 Window Function을 구현할 수 있다. Window Function에 대해서는 공식 문서를 참조해보자. 상당히 유용한 기능들이 많다. 이번에는 총 3개의 문제를 풀어볼텐데 난이도가 어느 정도 있는 문제들이다. 따라서 자세한 문제는 여기를 클릭해 180번, 184번, 185번 문제를 자세히 읽어보자. # 180번 먼저 문제와 문제에서 요구하는 출력형태를 살펴보자. Wr..
[SQL] MySQL - 나만의 Function 만들기(Leetcode - 177번) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 Leetcode임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 Leetcode 사이트를 방문해 보세요! 이번 포스팅에서는 SQL도 Python과 같은 다른 프로그래밍 언어들처럼 사용자 함수를 만드는 방법에 대해 알아보고 이를 이용해 문제를 풀어보려 한다. 여기서는 MySQL 기준으로의 사용자 함수 만드는 방법에 대해서만 소개한다. 우선 MySQL로 사용자 함수를 만드는 구조에 대해서 알아보자. 위와 같은 구조를 간단히 설명하면 CREATE FUNCTION~ 첫 번째 RETURNS 부분은 인풋 변수와 아웃풋으로 내뱉을 값의 type을 정하는 부분이며 BEGIN ~ END 사이에는 출력값을 내뱉기 위한 연산과 변수를 할당하는 부분이라 할 수 있다. 구현..
[SQL] - Delete, Update문 사용하기(Leetcode - 196, 627번) 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 Leetcode임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 Leetcode 사이트를 방문해 보세요! 이번 포스팅에서 소개할 문제와 풀이법은 Leetcode의 196번, 627번 문제이다. 특이하게도 이 문제들은 SELECT 문을 사용하는 것이 아닌 DELETE, UPDATE 문을 사용해야 한다. 참고로 SELECT, DELETE, INSERT, UPDATE는 DB의 DML(Data Manipulation Language)이다. 문제에 대한 세부적인 사항은 Leetcode 사이트의 해당 문제를 참고하자. 먼저 196번 문제와 문제에서 요구하는 출력 형태를 살펴보자. Write a SQL query to delete all duplicate emai..
[SQL] MySQL - SET 과 서브쿼리 사용하기 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 프로그래머스임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 프로그래머스 사이트를 방문해보세요! 이번 포스팅에서 소개할 SQL 구문은 프로그래머스 SQL 고득점 Kit의 Group by 카테고리의 입양 시각 구하기(2) 문제 풀이에 사용된 구문이다. 문제 풀이에 사용될 테이블과 문제에 대한 자세한 설명은 해당 문제의 링크를 참고하자. 문제에서 요구하는 사항은 다음과 같다. 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다. 이 때 활용할 방법은 SET 이라는 문법을 이용해 새로운 변수를 할당..
[SQL] MySQL - ORDER BY 와 IN 함께 사용하기 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 SQL Zoo임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 SQL Zoo 사이트를 방문해보세요! 이번 포스팅에서는 ORDER BY 절에 IN 문법을 사용하는 방법으로 SQL 문제를 해결하는 방법에 대해 알아보려고 한다. 해당 문제는 여기의 14번 문제이다. 우선 문제를 풀기 위해 사용되는 테이블과 문제를 살펴보자. Show the 1984 winners and subject ordered by subject and winner name; but list Chemistry and Physics last. (1984년에 수상한 수상자들을 출력하는데 우선 subject 기준으로 오름차순(알파벳 순서)로 정렬한 후 winner 기준으로 오름차순으로 정렬해..
[SQL] MySQL - ALL 사용법 🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 SQL Zoo임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 SQL Zoo 사이트를 방문해보세요! 이번 포스팅에서는 MySQL에서 사용되는 문법 중 하나인 'ALL'을 사용하여 SQL 문제를 푸는 방법에 대해 알아보려고 한다. 3가지 문제를 풀어볼 텐데, 첫 번째 문제에서 ALL에 대한 방법을 익히면 2, 3번째 문제는 감을 잡고 손쉽게 풀 수 있다. 우선 해당 문제와 문제 풀 때 이용할 데이터 테이블에 대해 살펴보자. 첫 번째 문제는 다음과 같으며 문제가 요구하는 정답의 테이블 형태도 함께 살펴보자. List each continent and the name of the country that comes first alphabetically. (각..