집 >데이터 베이스 >MySQL 튜토리얼 >MySQL의 그룹 내 데이터 순위를 지정하는 방법은 무엇입니까?
MySQL 그룹 순위 상세 설명
일부 시나리오에서는 단일 필드에만 의존하기보다는 그룹화를 기반으로 데이터 순위를 지정해야 합니다. 예를 들어, 다음과 같이 학생 ID, 수업 ID 및 성적이 포함된 학생 테이블이 있다고 가정합니다.
ID_STUDENT | ID_CLASS | GRADE |
---|---|---|
1 | 1 | 90 |
1 | 2 | 80 |
2 | 1 | 99 |
3 | 1 | 80 |
4 | 1 | 70 |
5 | 2 | 78 |
6 | 2 | 90 |
6 | 3 | 50 |
7 | 3 | 90 |
성적을 기준으로 각 학급의 학생 순위를 매기려면 다음 MySQL 쿼리를 사용할 수 있습니다.
<code class="language-sql">SELECT id_student, id_class, grade, @student:=CASE WHEN @class = id_class THEN @student+1 ELSE 1 END AS rn, @class:=id_class AS clset FROM (SELECT @student:= 0) s, (SELECT @class:= 0) c, (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student ) t</code>
이 쿼리에는 다음 단계가 포함되어 있습니다.
변수 초기화: 두 개의 사용자 변수 @student
및 @class
가 0으로 초기화됩니다.
행별 처리: 외부 쿼리는 ORDER BY
절에 지정된 순서(id_class
, grade DESC
, id_student
)에 따라 결과 집합의 각 행을 처리합니다. 여기서는 grade DESC
을 정렬에 사용하여 점수가 높은 학생이 1순위가 되도록 합니다.
그룹 내 순위: CASE
문은 현재 id_class
가 이전 id_class
(@class
)과 동일한지 확인합니다. 동일하면 @student
에 1을 추가하고, 그렇지 않으면 @student
를 1로 재설정합니다. 이렇게 하면 rn
값(순위)이 각 그룹(id_class
) 내에서 고유한지 확인됩니다.
그룹 할당: @class
에 현재 id_class
이 할당되고 다음 줄에서 비교됩니다.
이 쿼리의 출력은 원하는 학생 그룹 순위를 제공합니다.
ID_STUDENT | ID_CLASS | GRADE | RANK |
---|---|---|---|
2 | 1 | 99 | 1 |
1 | 1 | 90 | 2 |
3 | 1 | 80 | 3 |
4 | 1 | 70 | 4 |
6 | 2 | 90 | 1 |
1 | 2 | 80 | 2 |
5 | 2 | 78 | 3 |
7 | 3 | 90 | 1 |
6 | 3 | 50 | 2 |
위 내용은 MySQL의 그룹 내 데이터 순위를 지정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!