총 10분 중 11분
2001
시즌 2개, 그리고 영화
시즌 2:
5화
“아일랜드”
출연: 이나영, 김민준, 김민정, 현빈
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
회차
CS/DataBase
[데이터베이스] window 함수
window 함수
- select 구문에서 사용
- sum(col1) over(partition by col2 order by col3) as new_col
- partition by : group by랑 비슷하지만, 집계 결과가 아닌 본래 table 그대로 출력
- partition by는 생략 가능: 순서대로 누적합
- order by를 생략하면 누적 합계의 순서(1 + 3 -> 4 (+ 3) -> 7 식으로 나타나지 않고 바로 7이 뜸.
- cumtomer number 끼리의 amount를 더할건데, pay_date 오름차순으로 더해가는 것 -> 같은 custom_num의 total_amount
- 누적합 개념
- group by는 customer number를 하나로 모아서 집계 출력하지만, partition by는 table 모든 행을 출력
select cus_num, pay_date, amount.
sum(amount) over(partition by cus_num order by pay_date) as total_amount
from payments;
- 전체 테이블의 합 구하기 : sum(amount) over() as total_amount
- 고객별로 주문 날짜에 따른 주문 횟수의 누적합을 구하시오
더보기
select customernumber, ordernumber, orderdate,
count(ordernumber) over (partition by customernumber order by orderdate) as total_order from orders;
LEAD/LAG(over partition by order by)
- lag: 이전 데이터 (행간)
- lead: 이후 데이터 (행간)
- 다음 주문날이 언제일지 예측할 때 사용, 주문수량의 증분 계산
select ordernumber, productcode, quantityordered,
quantityordered - lag(quantityordered) over(partition by productcode order by ordernumbers) as quantity_difference
from orderdetails;
순위 함수
- ROW_NUMBER: 중복없이 고유한 순위 부여
- RANK: 중복값에 같은 순위 부여, 중복 숫자만큼 건너뜀
- DENSE_RANK: RANK와 유사하지만, 중복 숫자 건너뛰지 않음
- SQLd 단골 문제
- First_value():
- Last_value():
select custom_name, creditlimit,
row_number() over (order by creditlimit ASC) as row_rank,
rank() over (order by creditlimit ASC) as rank,
dense_rank() over (order by creditlimit ASC) as dense_rank
from customers
order by creditlimit ASC;
row_number은 같은 값에도 1, 2, 3 순위 매기고 rank는 1, 1, 1, 4, 5 중복값 건너뛰고, dense_rank는 1, 1, 1, 2, 3 순위는 다 부여
window frame
범위를 조정하는 함수
- ROW
행의 개수로 윈도우 프레임 정의 - RANGE
정렬의 기준이 되는 행의 값을 기준으로 정의 - PRECEDING
현재 행보다 이전 행 - FOLLOWING
- UNBOUNDED PRECEDING
현재 파티션의 첫 번째 행부터 현재 행까지의 범위 - UNBOUNDED FOLLOWING
현재 행부터 현재 파티션의 마지막 행까지의 범위 - CURRENT ROW
현재 행
select a, b, c
avg(quantityordered) over (order by ordernumber ROWS between 1 PRECEDING and 1 FOLLOWING) as moving_avg_1,
avg(quantityordered) over (order by ordernumber ROWS between 1 CURRENT ROW and 1 FOLLOWING) as moving_avg_2,
avg(quantityordered) over (order by ordernumber ROWS between 1 PRECEDING and 1 CURRENT ROW) as moving_avg_3,
avg(quantityordered) over (order by ordernumber RANGE between 1 PRECEDING and 1 FOLLOWING) as moving_avg_4,
from orderdetails;
- ROWS BETWEEN : 현재 행 기준 앞뒤 1개 행씩 추가해서 범위 지정
- RANGE BETWEEN : 현재 ordernumber 값(order by 값)과 차이가 1이내인 모든 행을 범위로 지정
'CS > DataBase' 카테고리의 다른 글
[데이터베이스] WITH구문 : CTE (0) | 2025.03.08 |
---|---|
[데이터베이스] 서브쿼리 (0) | 2025.03.08 |
관계 데이터 모델 기본 개념과 제약 조건 (2) | 2024.10.23 |
[관계 대수] 관계 연산자 (7) | 2024.10.23 |
[SQL] SELECT, INSERT, DELETE, UPDATE (4) | 2024.10.23 |
2025:03:08
CS/DataBase
[데이터베이스] window 함수