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
반응형
'Data Science > SQL' 카테고리의 다른 글
[Elice sql] 그룹 함수 (0) | 2025.03.11 |
---|---|
[Elice sql] 윈도우 함수 (0) | 2025.03.11 |
[Elice sql] as 뒤에는 () 사용 X (0) | 2025.03.10 |
[Elice SQL] 다중컬럼 서브쿼리, 스칼라 서브쿼리, 뷰 (0) | 2025.03.05 |
[Elice SQL] 비연관 서브쿼리. 항상 on 안써도 됌. 그냥 대치 값 넣을 것 (0) | 2025.03.04 |