DS가 되기 위한 여정 👩‍💻

Data Science/SQL

[Elice sql] 윈도우 함수.. 오타 진짜 주의

Tashapark 2025. 3. 11. 09:54
728x90

- 그룹 내 행 순서함수 

- 윈도우 함수가 길어지니깐 헷갈려진다..

 

수정 전

-- 그룹 별, 참가자의 앞, 뒤 기록과 그룹 내에서 가장 빠른 기록, 가장 느린 기록을 조회하세요.

select ID GROUP_NUM, TIME_RECORD, 
    LAG(TIME_RECORD, 1) over(PARTITION BY GROUP_NUM ORDER BY TIME_RECORD) LAG,
    LEAD(TIME_RECORD, 1) OVER(PARTITION BY GROUP_NUM ORDER BY TIME_RECORD) LEAD,
    FIRST_VALUE(TIME_RECORD) OVER(PARTITION BY GROUP_NUM ORDER BY TIME_RECORD LOWS BETWEEN UNBOUNDED PRECEEDING AND UNBOUNDED FOLLOWING) FIRST_VALUE,
    LAST_VALUE(TIME_RECORD) OVER(PARTITION BY GROUP_NUM ORDER BY TIME_RECORD LOWS BETWEEN UNBOUNDED PRECEEDING AND UNBOUNDED FOLLOWING) LAST_VALUE
from PARTICIPANT;

 

수정 후 

-- 오타랑... order by를 마지막에도 한 번 더 해줘야 됨..

- preceding -> 더블 e 아님.. 

- rows 뒤에 주의 할 것.. 

-- 그룹 별, 참가자의 앞, 뒤 기록과 그룹 내에서 가장 빠른 기록, 가장 느린 기록을 조회하세요.

select ID, GROUP_NUM, TIME_RECORD, 
    LAG(TIME_RECORD, 1) over(PARTITION BY GROUP_NUM ORDER BY TIME_RECORD) LAG,
    LEAD(TIME_RECORD, 1) OVER(PARTITION BY GROUP_NUM ORDER BY TIME_RECORD) LEAD,
    FIRST_VALUE(TIME_RECORD) OVER(PARTITION BY GROUP_NUM ORDER BY TIME_RECORD ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FIRST_VALUE,
    LAST_VALUE(TIME_RECORD) OVER(PARTITION BY GROUP_NUM ORDER BY TIME_RECORD ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) LAST_VALUE
from PARTICIPANT
ORDER BY GROUP_NUM, TIME_RECORD;

 

 


- 그룹 내 비율 함수

 

- ratio_to_report()

수정 전

-- 비용이 전체 비용 합계에서 차지하는 비율을 조회해 봅시다.

select ID, USE_CODE, EXPENSE, 
    ROUND((EXPENSE/ SUM(EXPENSE), 5) OVER()) RATIO_TO_REPORT
FROM BUDGET_USE
ORDER BY ID;

 

수정 후 

- expense에 대한 내용이기 때문에 over 뒤에 추가할  필요가 없음

- .. 그냥 예시만 보지 말고 생각을 하자.. 비율이잖아.. *100을 해야지..

- 괄호도 주의하고 

-- 비용이 전체 비용 합계에서 차지하는 비율을 조회해 봅시다.

select ID, USE_CODE, EXPENSE, 
    ROUND((EXPENSE/ SUM(EXPENSE) OVER())*100, 4) as RATIO
FROM BUDGET_USE
ORDER BY ID;
728x90
반응형