πŸ’― Coding Test/SQL ν…ŒμŠ€νŠΈ

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (Lv 2) - ROOT μ•„μ΄ν…œ κ΅¬ν•˜κΈ°

Dev_sHu 2024. 4. 1. 01:40

1) 문제 μ„€λͺ…

  • μ–΄λŠ ν•œ κ²Œμž„μ—μ„œ μ‚¬μš©λ˜λŠ” μ•„μ΄ν…œλ“€μ€ μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

  • 'ITEM_A'->'ITEM_B'와 같이 μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•  λ•Œ 'ITEM_A'λ₯Ό 'ITEM_B'의 PARENT μ•„μ΄ν…œ,PARENT μ•„μ΄ν…œμ΄ μ—†λŠ” μ•„μ΄ν…œμ„ ROOT μ•„μ΄ν…œμ΄λΌκ³  ν•©λ‹ˆλ‹€.

 

  • 예λ₯Ό λ“€μ–΄ 'ITEM_A'->'ITEM_B'->'ITEM_C' 와 같이 μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•œ μ•„μ΄ν…œμ΄ μžˆλ‹€λ©΄ 'ITEM_C'의 PARENT μ•„μ΄ν…œμ€ 'ITEM_B' 'ITEM_B'의 PARENT μ•„μ΄ν…œμ€ 'ITEM_A' ROOT μ•„μ΄ν…œμ€ 'ITEM_A'κ°€ λ©λ‹ˆλ‹€.

 

  • λ‹€μŒμ€ ν•΄λ‹Ή κ²Œμž„μ—μ„œ μ‚¬μš©λ˜λŠ” μ•„μ΄ν…œ 정보λ₯Ό 담은 ITEM_INFO ν…Œμ΄λΈ”κ³Ό μ•„μ΄ν…œ 관계λ₯Ό λ‚˜νƒ€λ‚Έ ITEM_TREE ν…Œμ΄λΈ”μž…λ‹ˆλ‹€.

 

  • ITEM_INFO ν…Œμ΄λΈ”μ€ λ‹€μŒκ³Ό κ°™μœΌλ©°, ITEM_ID, ITEM_NAME, RARITY, PRICEλŠ” 각각 μ•„μ΄ν…œ ID, μ•„μ΄ν…œ λͺ…, μ•„μ΄ν…œμ˜ 희귀도, μ•„μ΄ν…œμ˜ 가격을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
     
Column name Type Nullable
ITEM_ID INTEGER FALSE
ITEM_NAME VARCHAR(N) FALSE
RARITY INTEGER FALSE
PRICE INTEGER FALSE
  • ITEM_TREE ν…Œμ΄λΈ”μ€ λ‹€μŒκ³Ό κ°™μœΌλ©°, ITEM_ID, PARENT_ITEM_IDλŠ” 각각 μ•„μ΄ν…œ ID, PARENT μ•„μ΄ν…œμ˜ IDλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
     
Column name Type Nullable
ITEM_ID INTEGER FALSE
PARENT_ITEM_ID INTEGER TRUE
  • 단, 각 μ•„μ΄ν…œλ“€μ€ 였직 ν•˜λ‚˜μ˜ PARENT μ•„μ΄ν…œ IDλ₯Ό κ°€μ§€λ©°, ROOT μ•„μ΄ν…œμ˜ PARENT μ•„μ΄ν…œ IDλŠ” NULL μž…λ‹ˆλ‹€.

 

  • ROOT μ•„μ΄ν…œμ΄ μ—†λŠ” κ²½μš°λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

2) 문제

  • ROOT μ•„μ΄ν…œμ„ μ°Ύμ•„ μ•„μ΄ν…œ ID(ITEM_ID), μ•„μ΄ν…œ λͺ…(ITEM_NAME)을 좜λ ₯ν•˜λŠ” SQL문을 μž‘μ„±ν•΄ μ£Όμ„Έμš”.

 

  • 이 λ•Œ, κ²°κ³ΌλŠ” μ•„μ΄ν…œ IDλ₯Ό κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•΄ μ£Όμ„Έμš”.

 

3) μ˜ˆμ‹œ

  • 예λ₯Ό λ“€μ–΄ ITEM_INFO ν…Œμ΄λΈ”μ΄ λ‹€μŒκ³Ό κ°™κ³ 
       
ITEM_ID ITEM_NAME RARITY PRICE
0 ITEM_A COMMON 10000
1 ITEM_B LEGEND 9000
2 ITEM_C LEGEND 11000
3 ITEM_D UNIQUE 10000
4 ITEM_E LEGEND 12000
  • ITEM_TREE ν…Œμ΄λΈ”μ΄ λ‹€μŒκ³Ό κ°™λ‹€λ©΄
   
ITEM_ID PARENT_ITEM_ID
0 NULL
1 0
2 0
3 NULL
4 3
  • ROOT μ•„μ΄ν…œμ˜ μ•„μ΄ν…œ IDλŠ” PARENT μ•„μ΄ν…œ ID(PARENT_ITEM_ID)κ°€ NULL 인 0, 3 μ΄λ―€λ‘œ SQL문을 μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ λ‚˜μ™€μ•Ό ν•©λ‹ˆλ‹€.
   
ITEM_ID ITEM_NAME
0 ITEM_A
3 ITEM_D

4) 풀이

SELECT ITEM_ID, ITEM_NAME
FROM ITEM_INFO
WHERE ITEM_ID IN (SELECT ITEM_ID
                  FROM ITEM_TREE
                  WHERE PARENT_ITEM_ID IS NULL)
ORDER BY ITEM_ID ASC;

 

[Reference]

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ λ§€μΉ­. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 λ§€μΉ­ λ°›μœΌμ„Έμš”.

programmers.co.kr

 

λ°˜μ‘ν˜•