>데이터 베이스 >MySQL 튜토리얼 >하위 쿼리와 변수를 사용하여 MySQL에서 그룹화된 순위를 수행하는 방법은 무엇입니까?

하위 쿼리와 변수를 사용하여 MySQL에서 그룹화된 순위를 수행하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-17 19:46:09552검색

How to Perform Grouped Ranking in MySQL Using Subqueries and Variables?

MySQL 그룹 순위에 대한 자세한 설명

소개

데이터베이스 관리자는 그룹화된 데이터세트에서 항목의 순위를 지정해야 할 수도 있습니다. MySQL은 하위 쿼리와 임시 변수의 조합을 사용하여 그룹화된 순위를 수행하는 편리한 방법을 제공합니다.

문제 시나리오

다음 형식을 고려하세요.

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

목표는 각 수업 내에서 학생의 순위를 매겨 다음과 같은 결과를 얻는 것입니다.

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에서 그룹 순위를 지정하려면 다음 쿼리를 사용할 수 있습니다.

<code class="language-sql">SELECT id_student, id_class, grade,
   @student:=CASE WHEN @class = id_class THEN @student+1 ELSE 0 END AS rn,
   @class:=id_class AS clset
FROM
  (SELECT @student:= -1, @class := -1) s,
  (SELECT *
   FROM mytable
   ORDER BY id_class, grade DESC
  ) t;</code>

설명

이 쿼리는 단계별입니다.

  1. 초기 쿼리는 먼저 id_class로 정렬한 다음 grade로 내림차순으로 정렬합니다.
  2. 임시 변수 @student@class는 -1로 초기화됩니다.
  3. @class은 새 그룹 가입 여부를 결정하는 데 사용됩니다. @class에 저장된 id_class의 이전 값이 현재 id_class와 다른 경우 @student은 0으로 재설정됩니다. 그렇지 않으면 증가됩니다.
  4. @class에는 id_class의 새 값이 할당되며 다음 쿼리 반복에 사용됩니다.
  5. 마지막으로 rn는 각 그룹 내 순위로 계산됩니다. 올바른 순위를 보장하려면 내부 쿼리를 id_classgrade 기준으로 내림차순으로 정렬해야 합니다.

이 수정된 쿼리는 변수를 사용하여 그룹 순위를 얻는 방법을 보다 명확하게 보여주고 순위 결과의 정확성을 보장하기 위해 원래 쿼리의 일부 논리적 오류를 수정합니다. 핵심은 CASE WHEN 문의 조건부 판단과 @student@class 변수의 올바른 업데이트에 있습니다.

위 내용은 하위 쿼리와 변수를 사용하여 MySQL에서 그룹화된 순위를 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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