자신에게 친절할 것 :)

Data Science/MySQL

[HackerRank sql] group by가 아닌 서브쿼리 조건으로 넣을 것

Tashapark 2025. 1. 25. 21:38
728x90
반응형

Ollivander's Inventory

 

- 최대한.. 써보았으나 역시 굴러가지 않는 내 코드 ㅠ

- min(coins_needed)도 따로 빼라고 하는데.. 왜지.. 

자꾸 여기서 헷갈린다. 조건이니깐, 그런건지.. 

그냥 셀렉트에서 하면 왜 안되는 건지.. 

- 적용 순서 때문인 것 같기도 하고

 

==> 지피티 답

단순히 SELECT를 사용하면, MySQL은 그룹화 기준에 포함되지 않은 열들에 대해 어떤 값을 선택할지 보장하지 않습니다.

- 나는 그냥 age만 group by를 사용했는데 이렇게 하면, 나머지는 포함되지 않고 어떻게 선택될지 보장이 안 되기 때문에 서브쿼리로

넣어서 확실하게 적용되도록.. 하는 거래.. 각 age별로 가장 작은 coin_needed를 계산해야 하니깐. 

 

수정 전

select w.id, w_p.age, min(w.coins_needed), w.power
from wands w
join wands_property w_p using(code)
where w_p.is_evil = 0
group by w_p.age -- 이러면 그룹바이랑 min이랑 헷갈린 거 같다고 지피티가 뭐라고 함.. 
order by w.power desc, w_p.age desc;

 

 

수정 후 

- 굳이 그룹바이를 쓰지 않고 어차피.. 코인이 가장 적게 필요한 얘들 중에서

age와 power가 같은 거니깐..

- 이게 생각을 하는 방식이 아직 컴퓨터화가 되지 못한 느낌임..

select w.id, w_p.age, w.coins_needed, w.power
from wands w
join wands_property w_p using(code)
where w_p.is_evil = 0
and w.coins_needed = (
    select min(w1.coins_needed)
    from wands w1
    join wands_property w_p1 using(code)
    where w_p1.age = w_p.age -- 코인을 적게 사용하는 값과 같은 age -> 굳이 그룹바이  x
    and w1.power = w.power -- 마찬가지로 같은 power인 경우 
)    
order by w.power desc, w_p.age desc;
 

 

728x90
반응형