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

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

Patricia Arquette
Patricia Arquette원래의
2025-01-17 19:32:11607검색

How to Perform Grouped Ranking Queries in MySQL?

MySQL 그룹 순위 쿼리: 전체 가이드

데이터 처리 시 그룹 내 각 레코드의 순위를 결정해야 하는 경우가 많습니다. MySQL에서는 그룹화 절과 함께 ROW_NUMBER() 또는 RANK()와 같은 창 함수를 사용하여 이 기능을 구현할 수 있습니다.

다음 형식을 고려하세요.

学生ID (ID_STUDENT) 班级ID (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

그룹화된 순위를 생성하려면 다음 쿼리를 사용할 수 있습니다.

<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. 행 정렬: ORDER BY 절의 하위 쿼리를 사용하면 데이터가 먼저 id_class로 정렬된 다음 grade로 내림차순으로, 마지막으로 id_student로 정렬됩니다. 이를 통해 같은 반 내에서 성적이 높은 학생이 더 높은 순위를 차지하게 됩니다.

  2. 변수 초기화: 별도의 하위 쿼리를 사용하여 두 개의 사용자 정의 변수 @student@class를 0으로 초기화합니다. 이러한 변수는 각각 순위 및 클래스 그룹을 추적하는 데 사용됩니다.

  3. 그룹화 및 순위: 기본 쿼리는 CASE 표현식을 사용하여 각 그룹 내 순위를 결정합니다. 동일한 그룹의 행(id_class 기준)의 경우 새 그룹의 순위가 증가하고 순위가 1로 재설정됩니다. 수정된 @student 변수에는 순위 값이 할당됩니다.

  4. 업데이트 클래스 그룹: @class 변수는 활성 그룹을 추적하기 위해 현재 id_class 값으로 업데이트됩니다.

  5. 최종 결과: 쿼리는 사용자 정의 변수를 사용하여 계산된 순위(rn)를 포함하여 해당 열을 선택합니다.

이 그룹화된 순위 쿼리를 사용하면 MySQL의 다양한 수업 내에서 학생의 순위를 효율적으로 결정할 수 있습니다. 이 방법은 하위 쿼리, 사용자 정의 변수 및 조건문을 결합하여 원하는 결과를 얻습니다. 이 방법은 원본 기사와 약간 다르므로 원본 기사의 변수 초기화 및 증분 논리에 문제가 있어 쉽게 순위 오류가 발생할 수 있습니다. 이 방법은 이 문제를 수정하고 순위 결과의 정확성을 보장합니다.

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

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