본문 바로가기

[LeetCode] SQL50 - Sorting and Grouping 문제풀이

by qwee0328 2025. 2. 17.

LeetCode에서 SQL50 문제들을 풀어보았습니다.

이번 글에서는 SQL50 문제 중 Sorting and Grouping 7개를 풀어보겠습니다.
각 문제의 설명과 함께 SQL 풀이 코드를 제공하니, 차근차근 따라와 보세요! 🚀

아래는 해당 문제를 풀어볼 수 있는 링크입니다!

 

https://leetcode.com/studyplan/top-sql-50

 


 

📝 2356. Number of Unique Subjects Taught by Each Teacher

🔹 각 교사가 가르치는 고유 과목의 수

각 교사가 대학에서 가르치는 고유한 과목의 수를 계산하는 솔루션을 작성하세요.
어떤 순서 로든 결과 테이블을 반환합니다 .

 

 

🔍 문제 설명

  • teacher_id 별로 고유한 subject_id 개수를 계산
  • 결과 테이블은 정렬 조건 없음

 

✅ SQL 풀이

  SELECT teacher_id
       , COUNT(DISTINCT subject_id) AS cnt
    FROM Teacher
GROUP BY teacher_id

 

 


 

📝 1141. User Activity for the Past 30 Days 1

🔹 지난 30일 동안의 사용자 활동 1

2019년 7월 27일까지 30일 동안의 일일 활성 사용자 수를 구하는 솔루션을 작성하세요.
사용자가 해당 날짜에 하나 이상의 활동을 수행한 경우 해당 날짜에 활성 상태였습니다.
어떤 순서로든 결과 테이블을 반환합니다.

 

 

🔍 문제 설명

  • activity_date 기준 30일간의 활성 사용자 수 계산
  • 사용자가 해당 날짜에 한 번 이상 활동하면 활성 사용자로 인정
  • 결과 테이블은 정렬 조건 없음

 

✅ SQL 풀이

  SELECT activity_date AS day
       , COUNT(DISTINCT user_id) AS active_users
    FROM Activity
   WHERE activity_date BETWEEN DATE_SUB('2019-07-27', INTERVAL 29 DAY) AND '2019-07-27'
GROUP BY activity_date

 

 


 

📝 1070. Product Sales Analysis 3

🔹 제품 판매 분석 3

판매된 모든 제품의 첫 해에 대한 제품 ID, 연도, 수량 및 가격을 선택하는 솔루션을 작성하세요.
결과 테이블을 어떤 순서로든 반환합니다.

 

 

🔍 문제 설명

  • 각 product_id의 최초 판매 연도를 찾기
  • 해당 연도의 quantity, price를 조회
  • 결과 테이블은 정렬 조건 없음

 

✅ SQL 풀이

SELECT product_id
     , year AS first_year
     , quantity
     , price
  FROM Sales
 WHERE (product_id, year) IN (
                               SELECT product_id
                                    , MIN(year) AS year
                                 FROM Sales
                             GROUP BY product_id
                             )

 

 

반응형

 

📝 596. Classes More Than 5 Students

🔹 5명 이상의 수업

최소 5명의 학생이 있는 모든 수업을 찾는 솔루션을 작성하세요.
어떤 순서로든 결과 테이블을 반환합니다.

 

 

🔍 문제 설명

  • class별 **학생 수(count)**를 계산
  • 학생 수가 5명 이상인 class만 선택

 

✅ SQL 풀이

  SELECT class
    FROM Courses 
GROUP BY class
  HAVING COUNT(student) >= 5

 

 


 

📝 1729. Find Followers Count

🔹 팔로어 수 찾기

각 사용자에 대해 팔로어 수를 반환하는 솔루션을 작성하세요.
user_id를 기준으로 오름차순으로 정렬된 결과 테이블을 반환합니다.

 

 

🔍 문제 설명

  • 각 user_id별 팔로어(follower) 수 계산
  • 결과를 user_id 기준 오름차순 정렬

 

✅ SQL 풀이

  SELECT user_id
       , COUNT(0) AS followers_count
    FROM Followers
GROUP BY user_id
ORDER BY user_id

 

 


 

📝 619. Biggest Single Number

🔹 가장 큰 단일 숫자

단일 숫자는 MyNumbers 테이블에 한 번만 나타나는 숫자입니다.
가장 큰 단일 숫자를 찾으십시오. 단일 숫자가 없으면 null을 보고합니다.

 

 

🔍 문제 설명

  • 한 번만 나타나는(count < 2) 숫자 중 최대값 찾기
  • 단일 숫자가 없으면 NULL 반환

 

✅ SQL 풀이

WITH single_number AS (
    SELECT num
      FROM MyNumbers
  GROUP BY num
    HAVING COUNT(num) < 2
)
SELECT MAX(num) AS num
  FROM single_number

 

 

728x90

 

📝 1045. Customers Who Bought All Products

🔹 모든 제품을 구매한 고객

Product 테이블의 모든 제품을 구매한 Customer 테이블의 고객 ID를 보고하는 솔루션을 작성하세요.
어떤 순서로든 결과 테이블을 반환합니다.

 

 

🔍 문제 설명

  • Product 테이블의 모든 제품을 구매한 고객 찾기
  • customer_id 기준으로 그룹화 후, 구매한 제품 수가 Product 테이블의 총 제품 수와 같은 경우만 선택

 

✅ SQL 풀이

   SELECT customer_id
     FROM Customer a
LEFT JOIN Product b
       ON a.product_key = b.product_key
 GROUP BY customer_id
   HAVING COUNT(DISTINCT b.product_key) = (SELECT COUNT(0) FROM Product)

 

 

728x90
반응형