-
[MSSQL] RANK를 사용하여 순위 매기기WEB/MSSQL 2020. 12. 11. 11:00
[MSSQL] RANK를 사용하여 순위 매기기
WITH TEMP_TABLE_1 AS
(
SELECT '1반' AS [반정보], '일월~' AS [이름], 90 AS [국어], 80 AS [영어], 70 AS [수학]
UNION ALL
SELECT '1반' AS [반정보], 'Feb!' AS [이름], 70 AS [국어], 60 AS [영어], 100 AS [수학]
UNION ALL
SELECT '1반' AS [반정보], '3월@' AS [이름], 80 AS [국어], 80 AS [영어], 50 AS [수학]
UNION ALL
SELECT '1반' AS [반정보], '사월#' AS [이름], 50 AS [국어], 80 AS [영어], 75 AS [수학]
UNION ALL
SELECT '2반' AS [반정보], 'May$' AS [이름], 70 AS [국어], 65 AS [영어], 45 AS [수학]
UNION ALL
SELECT '2반' AS [반정보], '6월%' AS [이름], 85 AS [국어], 90 AS [영어], 75 AS [수학]
UNION ALL
SELECT '2반' AS [반정보], '칠월~' AS [이름], 95 AS [국어], 65 AS [영어], 70 AS [수학]
UNION ALL
SELECT '2반' AS [반정보], 'Aug!' AS [이름], 50 AS [국어], 70 AS [영어], 95 AS [수학]
UNION ALL
SELECT '3반' AS [반정보], '9월@' AS [이름], 85 AS [국어], 85 AS [영어], 85 AS [수학]
UNION ALL
SELECT '3반' AS [반정보], '십월*' AS [이름], 60 AS [국어], 85 AS [영어], 70 AS [수학]
UNION ALL
SELECT '3반' AS [반정보], 'Nov&' AS [이름], 80 AS [국어], 60 AS [영어], 65 AS [수학]
UNION ALL
SELECT '3반' AS [반정보], '12월^' AS [이름], 100 AS [국어], 60 AS [영어], 75 AS [수학]
)SELECT [반정보]
, [이름]
, [국어]
, [영어]
, [수학]
, (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) AS 총점
, (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학]))/3 AS 평균-- PARTITION BY를 사용하여 전체대상으로 총점으로 등수(석차) 매기기
, RANK()OVER( ORDER BY (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) DESC, [국어] DESC, [영어] DESC, [수학] DESC) AS 전체등수-- PARTITION BY를 사용하여 반 마다 총점으로 등수(석차) 매기기
, RANK()OVER(PARTITION BY [반정보] ORDER BY (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) DESC, [국어] DESC, [영어] DESC, [수학] DESC) AS 반별등수
FROM TEMP_TABLE_1위 의 쿼리 실행 결과 SELECT [반정보]
, [이름]
, (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) AS 총점-- RANK() : 동일 점수일 경우 동일한 순위 표시 후 다음 순위는 동일한 순위의 수 만큼 건너뛰고 이어서 표시
, RANK()OVER( ORDER BY (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) DESC) AS [RANK]-- DENSE_RANK() : 동일 점수일 경우 동일한 순위 표시 후 다음 순위는 바로 이어서 표시
, DENSE_RANK()OVER( ORDER BY (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) DESC) AS [DENSE_RANK]-- ROW_NUMBER() : 동일 점수일 경우 동일한 순위로 표시하지 않고 테이블의 ROWNUM 순으로 순위 표시
, ROW_NUMBER()OVER( ORDER BY (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) DESC) AS [ROW_NUMBER]-- NTILE() : 괄호 안의 수만큼 순위 표시
, NTILE(3)OVER( ORDER BY (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) DESC) AS [NTILE(3)]
FROM TEMP_TABLE_1
ORDER
BY (CONVERT(INT, [국어]) + CONVERT(INT, [영어]) + CONVERT(INT, [수학])) DESCRANK, DENSE_RANK, ROW_NUMBER, NTILE 차이 쿼리 실행 'WEB > MSSQL' 카테고리의 다른 글
[MSSQL] 두 날짜사이에 날짜별 통계 쿼리 (0) 2020.12.18 [MSSQL] 두 날짜사이에 모든 날짜 출력 쿼리 (0) 2020.12.17 [MSSQL] WHERE절에 LIKE 검색 방법 (0) 2020.12.11 [MSSQL] 테이블 조인하여 UPDATE/DELETE 쿼리 (0) 2020.12.10 [MSSQL] 컬럼을 로우로 변경하여 출력 (0) 2020.12.09