반응형
순위함수(분석함수)
결과에 순번, 순위를 매기는 함수
비집계함수 중 RANK, NTILE, DENSE_RANK, ROW_NUMBER 등이 해당된다.
SELECT <순위함수이름> (arguments) OVER ([PARTITION BY <partion_by_list>] ORDER BY <order_by_list>) FROM 테이블명; |
PARTITION BY : 동일 그룹으로 묶어줄 칼럼 명 지정
ORDER BY : Partition 정의에 지정된 컬럼에 대한 정렬 수행
LAG() 함수
LAG() 함수는 LEAD() 함수와 비슷합니다. 두 함수 모두 2개의 행 간의 차이를 구할 때 사용되곤 합니다.
두 함수의 차이점이라고 하면 LAG() 함수는 앞 행에서 값을 반환하고 LEAD() 함수는 뒷 행에서 값을 반환합니다.
SELECT c.Code ,
c.Name ,
c.Continent ,
c.Population ,
LAG(Population) OVER(PARTITION BY Continent ORDER BY Population DESC) AS value,
LAG(Population) OVER(PARTITION BY Continent ORDER BY Population DESC) - c.Population AS difference
FROM country c ;
윈도우 함수가 사용된 문장을 보면 OVER() 구문 내에 인구수 기준으로 구분막(파티션)이 생겼습니다. 각 구분막 내에서 LAG() 함수는 열 sale_value의 기존 행 이전 행 값을 반환했습니다.
그래서 India의 인구수의 value는 이전 China인 값을 가져오고, Indonesia는 India의 인구수를 반환했습니다.
China같은 경우는 이전 값이 없으므로 Null값을 반환했습니다.
대륙 별 가장 높은 값과 본인의 인구수 차이를 계산
SELECT c.Code ,
c.Name ,
c.Continent ,
c.Population ,
MAX(c.Population) OVER(PARTITION BY c.Continent ORDER BY Population DESC) AS continent_max_value,
MAX(c.Population) OVER(PARTITION BY c.Continent ORDER BY Population DESC) - c.Population AS difference
FROM country c
GROUP BY c.Code ;
반응형
'DB > MySQL' 카테고리의 다른 글
[MySQL] IFNULL() (0) | 2023.01.18 |
---|---|
[MySQL] SUM() OVER()함수 (0) | 2023.01.17 |
[MySQL] LEAD() 함수 (0) | 2023.01.17 |
[MySQL] ROW_NUMBER() 함수 (0) | 2023.01.17 |
[MySQL] DENSE_RANK() 함수 (0) | 2023.01.17 |