자신에게 친절할 것 :)

Data Science/MySQL

[HackerRank sql] 중간값 구하기. cte

Tashapark 2025. 1. 25. 13:08
728x90
반응형

Weather Observation Station 20 번 문제인데 솔직히... 잘 모르겠다.

 

mysql을 할 때 집계함수의 경우 where에 쓸 수 없다는 것은 알겠고, 

서브쿼리의 윈도우 함수로 계속 풀려고 했는데도 잘 안됐다..

내가 볼 땐 더 쉬운 것을 풀어봐야 겠는데.. 어렵다.

 

mysql은 앞서 계산한 값을 바로 참조할 수 없기 때문에

CTE(Common Table Expression)를 임의로 만들어서 사용하려는 것은 알겠다.

다만, 어떨 때 그렇게 할 수있는지를 아직도 잘 모르겠다.. 

다시말하지만, 부트캠프를 들으면서 잠깐 배웠다고 해서.. 알게 되는 게 아니다 진심으로.

별 수 없이 discussion 과 구글링 그리고 지피티에게 물어보면사 하나하나 뜯어보면서 익히고 있다.

..

풀다가 자꾸 medium으로 넘어가는데..

내가 프로시저, cte를 제대로 몰라서..

다른데서 강의를 추가로 들어야 되나 고민중이다.. 

 

median의 정의에 집중해야 하는 데

홀수 일때 그냥 중간값이 아니라, 이것도 짝수에서 중심의 두 값의 평균인 것처럼

같은 값을 평균하면 median이 된다고 생각을 해줘야 함. 

with ordered as ( -- cte로 빼줌
    select 
        lat_n,
        row_number() over( order by lat_n ) as row_num, -- 정렬 시키고 순서번호 부여
        count(*) over () as total_count -- 모든 행에 똑같이 total_count  부여
    from station
)
select round(avg(lat_n), 4) as median  -- 평균의 소수점 4번째 까지 구하기 -> median이 중앙값이니깐.
from ordered 
where row_num in ( -- 홀,짝 경우의 수를 적지 않아도 값이 달라짐.
    floor((total_count + 1) / 2), -- 홀수일 경우에는 두 값이 같음. 중앙값 1 한개이므로 
    ceil(total_count/2) -- 짝수일 경우에는 두 값이 달라지기에 그 둘의 평균을 구하면 됨. 
);

 

728x90
반응형