* 분석 함수 (통계)

-- Pivot / UnPivot
-- 한 열에 포함된 여러 값을 출력. 컬럼으로 변환하여 테이블 반환 식을 회전하고 
-- 필요하면 집계까지 수행할 수 있다.

SELECT *
FROM MemberGame
Pivot( Sum(cash) -- 집계 함수(열)

    For userLevel -- 새로운 컬럼으로 변경할 컬럼명

    In ([1],[2],[3],[4],[5]) -- 컬럼 목록

) AS resultPivot; -- 피벗 이름


-- SQL Server 2012부터 제공
-- 다음 행과의 값의 차이 : LEAD(컬럼명, 다음 행 위치, 다음 행이 없을 경우 자기자신)

SELECT userXp, userXp - (LEAD(userXp, 1,0) OVER(Order By userXp Desc)) as [다음 회원과 userXp 차이], *
FROM MemberGame


-- 이전 행과의 값의 차이 : LEAD(컬럼명, 이전 행 위치, 이전 행이 없을 경우 자기자신)
SELECT userXp, userXp - (LAG(userXp, 1,0) OVER(Order By userXp Desc)) as [이전 회원과 userXp 차이], *
FROM MemberGame


-- 그룹의 가장 큰 값과의 차이
SELECT userLevel, userXp, userXp - (FIRST_VALUE(userXp) OVER(Partition By userLevel Order by userXp Desc)) as [다음 회원과 userXp 차이], *
FROM MemberGame


-- 누적 합계 (자신의 값과 같거나 큰 경우)
SELECT userLevel, userXp, (CUME_DIST() OVER(Partition By userLevel Order by userXp Desc)) * 100 as [누적인원 백분율%], *
FROM MemberGame




-- 그룹별 중앙값 계산
SELECT Distinct userLevel, PERCENTILE_CONT(0.5) Within Group(Order By userXp) Over(Partition By userLevel) as [userLevel 별 중앙값]
FROM MemberGame 

-- PERCENTILE_CONT 0.0~1.0 사이의 백분율 (0.5이면 정확히 중간값)
-- Error : 현재 호환성 모드에서는 PERCENTILE_CONT 함수를 사용할 수 없습니다. 110 모드 이상에서만 허용됩니다.


-- 그룹별 중앙위치 계산
SELECT Distinct userLevel, PERCENTILE_DISC(0.5) Within Group(Order By userXp) Over(Partition By userLevel) as [userLevel 별 중앙값]
FROM MemberGame 
-- PERCENTILE_CONT 0.0~1.0 사이의 백분율 (0.5이면 정확히 위치값)
-- Error : 현재 호환성 모드에서는 PERCENTILE_CONT 함수를 사용할 수 없습니다. 110 모드 이상에서만 허용됩니다.

 

 

 

 

 

+ Recent posts