집 >데이터 베이스 >MySQL 튜토리얼 >하위 쿼리와 변수를 사용하여 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>
이 쿼리는 단계별입니다.
id_class
로 정렬한 다음 grade
로 내림차순으로 정렬합니다. @student
및 @class
는 -1로 초기화됩니다. @class
은 새 그룹 가입 여부를 결정하는 데 사용됩니다. @class
에 저장된 id_class
의 이전 값이 현재 id_class
와 다른 경우 @student
은 0으로 재설정됩니다. 그렇지 않으면 증가됩니다. @class
에는 id_class
의 새 값이 할당되며 다음 쿼리 반복에 사용됩니다. rn
는 각 그룹 내 순위로 계산됩니다. 올바른 순위를 보장하려면 내부 쿼리를 id_class
및 grade
기준으로 내림차순으로 정렬해야 합니다. 이 수정된 쿼리는 변수를 사용하여 그룹 순위를 얻는 방법을 보다 명확하게 보여주고 순위 결과의 정확성을 보장하기 위해 원래 쿼리의 일부 논리적 오류를 수정합니다. 핵심은 CASE WHEN
문의 조건부 판단과 @student
및 @class
변수의 올바른 업데이트에 있습니다.
위 내용은 하위 쿼리와 변수를 사용하여 MySQL에서 그룹화된 순위를 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!