MySQL의 여러 열을 기반으로 순위 결정
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!