>데이터 베이스 >MySQL 튜토리얼 >MySQL의 그룹 내 데이터 순위를 지정하는 방법은 무엇입니까?

MySQL의 그룹 내 데이터 순위를 지정하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-17 19:51:10210검색

How to Rank Data Within Groups in 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>

이 쿼리에는 다음 단계가 포함되어 있습니다.

  1. 변수 초기화: 두 개의 사용자 변수 @student@class가 0으로 초기화됩니다.

  2. 행별 처리: 외부 쿼리는 ORDER BY 절에 지정된 순서(id_class, grade DESC, id_student)에 따라 결과 집합의 각 행을 처리합니다. 여기서는 grade DESC을 정렬에 사용하여 점수가 높은 학생이 1순위가 되도록 합니다.

  3. 그룹 내 순위: CASE 문은 현재 id_class가 이전 id_class(@class)과 동일한지 확인합니다. 동일하면 @student에 1을 추가하고, 그렇지 않으면 @student를 1로 재설정합니다. 이렇게 하면 rn 값(순위)이 각 그룹(id_class) 내에서 고유한지 확인됩니다.

  4. 그룹 할당: @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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.