MySQL의 여러 열을 기반으로 사용자 순위를 매기는 방법은 무엇입니까?
Dec 29, 2024 am 09:45 AMMySQL의 여러 열을 기반으로 순위 결정
MySQL에서 데이터 작업을 할 때 여러 열을 기반으로 행 순위를 결정해야 하는 경우가 많습니다. 특정 기준에 따라. 이 경우 작업은 사용자 ID와 게임 ID를 모두 기준으로 사용자 순위를 매기는 작업이며, 순위는 게임 세부 정보의 내림차순으로 정렬됩니다.
이 문제를 해결하기 위해 하위 쿼리를 활용하여 다음과 같은 데이터를 정렬합니다. 동일한 사용자 ID를 가진 모든 행이 함께 그룹화되어 게임 세부 정보를 기준으로 내림차순으로 정렬됩니다. 그런 다음 조건부 CASE..WHEN 표현식을 사용하여 행 번호 매기기를 평가하고 사용자 게임 순위를 할당합니다.
다음 SQL 쿼리는 해결책을 제공합니다.
SET @r := 0, @u := 0; SELECT @r := CASE WHEN @u = dt.user_id THEN @r + 1 WHEN @u := dt.user_id /* Notice := instead of = */ THEN 1 END AS user_game_rank, dt.user_id, dt.game_detail, dt.game_id FROM ( SELECT user_id, game_id, game_detail FROM game_logs ORDER BY user_id, game_detail DESC ) AS dt
쿼리에서 다음을 사용합니다. 행 순위와 사용자 ID를 추적하기 위한 사용자 정의 변수 @r 및 @u. user_game_rank 평가와 @u에 대한 사용자 ID 할당이 동일한 표현식 내에서 발생하여 올바른 순서를 유지하도록 합니다.
이 쿼리의 결과는 원하는 대로 사용자 게임 순위를 제공합니다.
| user_game_rank | user_id | game_detail | game_id | | -------------- | ------- | ----------- | ------- | | 1 | 6 | 260 | 11 | | 2 | 6 | 100 | 10 | | 1 | 7 | 1200 | 10 | | 2 | 7 | 500 | 11 | | 3 | 7 | 260 | 12 | | 4 | 7 | 50 | 13 |
MySQL 8.0 이상의 경우 더 효율적인 접근 방식은 지정된 기준에 따라 행 순위를 직접 계산할 수 있는 Row_Number() 함수를 사용하는 것입니다. 기준:
SELECT user_id, game_id, game_detail, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY game_detail DESC) AS user_game_rank FROM game_logs ORDER BY user_id, user_game_rank;
이 쿼리는 이전 쿼리와 동일한 출력을 제공하지만 향상된 성능을 제공하며 MySQL 8.0에서 행 순위 지정에 권장되는 방법입니다.
위 내용은 MySQL의 여러 열을 기반으로 사용자 순위를 매기는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까?

MySQL의 문제를 해결하는 방법 공유 라이브러리를 열 수 없습니다.

Linux에서 MySQL을 실행합니다 (Phpmyadmin이있는 Podman 컨테이너가 포함되지 않음)

일반적인 취약점 (SQL 주입, 무차별 적 공격)에 대해 MySQL을 어떻게 보호합니까?
