본문 바로가기

[LeetCode] 1795. Rearrange Products Table

by qwee0328 2025. 3. 12.

📝 1795. Rearrange Products Table

🔹 제품 테이블 재배치

각 행에 (product_id, store, Price)가 포함되도록 Products 테이블을 재정렬하는 솔루션을 작성하세요. 매장에서 제품을 구입할 수 없는 경우 결과 테이블에 해당 product_id 및 매장 조합이 있는 행을 포함하지 마세요.
어떤 순서로든 결과 테이블을 반환합니다.

 

 

📝 문제 설명

Rearrange Products Table(1795번) 문제는 Products 테이블에서 데이터를 가로 형식에서 세로 형식으로 변환하는 문제입니다.
즉, store1, store2, store3처럼 개별 컬럼으로 존재하는 데이터를 (product_id, store, price) 형태의 행(Row) 단위로 변환해야 합니다.
또한, 가격 정보가 없는 경우(NULL)는 제외해야 합니다.

최종 결과는 어떤 순서로든 반환할 수 있습니다.

 

📊 테이블 구조

Products 테이블

Column Name Type
product_id int
store1 int
store2 int
store3 int

 

 

💡 SQL 문제 해결 방법

  1. 각 매장별로 product_id와 가격을 분리하여 가져오기
    • UNION을 사용하여 매장별로 가격을 store와 price로 분리합니다.
    • 각 매장에 대한 가격 정보를 하나의 테이블로 통합합니다.
  2. price가 NULL인 값은 제외
    • WHERE price IS NOT NULL 조건을 사용하여 가격 정보가 없는 행을 제외합니다.
  3. 결과는 매장별로 구분되지 않으며 순서는 중요하지 않음
    • 어떤 순서로든 반환할 수 있기 때문에 별도의 정렬 조건은 필요하지 않습니다.

 

반응형

 

🖥️ SQL 풀이

SELECT * 
  FROM (
            SELECT product_id
                 , 'store1' AS store
                 , store1 AS price 
              FROM Products
         UNION ALL
            SELECT product_id
                 , 'store2' AS store
                 , store2 AS price 
              FROM Products
         UNION ALL
            SELECT product_id
                 , 'store3' AS store
                 , store3 AS price 
              FROM Products
       ) temp
   WHERE price IS NOT NULL;

 

 

🔍 쿼리 분석

  • UNION: 각 매장(store1, store2, store3)에 대해 동일한 형식 (product_id, store, price)로 값을 변환하여 반환합니다.
    • 첫 번째 SELECT문은 store1의 가격 정보를 store와 price로 변환합니다.
    • 두 번째 SELECT문은 store2의 가격 정보를 동일한 형식으로 변환합니다.
    • 세 번째 SELECT문은 store3의 가격 정보를 변환합니다.
  • WHERE price IS NOT NULL: 이 조건은 가격 정보가 없는 행을 제외합니다. store1, store2, store3 각각의 가격이 NULL일 경우 해당 행은 제외되므로, 실질적으로 가격 정보가 있는 행만 결과에 포함됩니다.

 

📌 실행 예제

📊 입력 데이터

Products 테이블

product_id store1 store2 store3
0 95 100 105
1 70 null 80

 

쿼리 실행 결과

product_id store price
0 store1 95
0 store2 100
0 store3 105
1 store1 70
1 store3 80

 

  • 제품 0은 세 매장 모두에서 각각 가격이 95, 100, 105로 판매됩니다.
  • 제품 1은 매장 1에서 가격이 70, 매장 3에서 가격이 80으로 판매됩니다.
  • 제품 1은 매장 2에서는 판매되지 않습니다.

 

🎯 결론

이 문제는 데이터를 가로에서 세로로 변환(PIVOT 해제)하는 방법을 연습할 수 있습니다.
특히, UNION ALL을 활용한 데이터 변환NULL 값 제거가 중요한 개념입니다.

 

 


 

 

더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀

728x90
반응형