23강. 레코드에 순번 붙이기

1. 기본 키가 한 개의 필드일 경우

student_id weight (kg)
A100 50
A101 55
A124 55
B343 60
B346 72
C563 72
C345 72

윈도우 함수 사용

SELECT student_id,
        ROW_NUMBER() OVER (ORDER BY student_id) AS seq
FROM Weights;

상관 서브쿼리 사용

SELECT student_id,
        (SELECT COUNT(*)
        FROM Weights W2
        WHERE w2.student_id <= W1.student_id) AS seq
FROM Weights W1;

결과

student_id seq
A100 1
A101 2
A124 3
B343 4
B346 5
C345 6
C563 7

2. 기본 키가 여러 개의 필드로 구성되는 경우

class student_id weight
1 100 50
1 101 55
1 102 56
2 100 60
2 101 72
2 102 73
2 103 73

윈도우 함수 사용

SELECT class, student_id,
        ROW_NUMBER() OVER (ORDER BY class, student_id) AS seq
FROM Weights2;

상관 서브쿼리 사용

SELECT class, student_id,
        (SELECT COUNT(*)
        FROM Weights2 W2
        WHERE (W2.class, W2.student_id) <= (W1.class, W1.student_id) ) AS seq
FROM Weights2 W1;

다중 필드 비교