집 >데이터 베이스 >MySQL 튜토리얼 >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>
작동 방식:
행 정렬: ORDER BY 절의 하위 쿼리를 사용하면 데이터가 먼저 id_class
로 정렬된 다음 grade
로 내림차순으로, 마지막으로 id_student
로 정렬됩니다. 이를 통해 같은 반 내에서 성적이 높은 학생이 더 높은 순위를 차지하게 됩니다.
변수 초기화: 별도의 하위 쿼리를 사용하여 두 개의 사용자 정의 변수 @student
및 @class
를 0으로 초기화합니다. 이러한 변수는 각각 순위 및 클래스 그룹을 추적하는 데 사용됩니다.
그룹화 및 순위: 기본 쿼리는 CASE 표현식을 사용하여 각 그룹 내 순위를 결정합니다. 동일한 그룹의 행(id_class
기준)의 경우 새 그룹의 순위가 증가하고 순위가 1로 재설정됩니다. 수정된 @student
변수에는 순위 값이 할당됩니다.
업데이트 클래스 그룹: @class
변수는 활성 그룹을 추적하기 위해 현재 id_class
값으로 업데이트됩니다.
최종 결과: 쿼리는 사용자 정의 변수를 사용하여 계산된 순위(rn)를 포함하여 해당 열을 선택합니다.
이 그룹화된 순위 쿼리를 사용하면 MySQL의 다양한 수업 내에서 학생의 순위를 효율적으로 결정할 수 있습니다. 이 방법은 하위 쿼리, 사용자 정의 변수 및 조건문을 결합하여 원하는 결과를 얻습니다. 이 방법은 원본 기사와 약간 다르므로 원본 기사의 변수 초기화 및 증분 논리에 문제가 있어 쉽게 순위 오류가 발생할 수 있습니다. 이 방법은 이 문제를 수정하고 순위 결과의 정확성을 보장합니다.
위 내용은 MySQL에서 그룹화된 순위 쿼리를 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!