> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 여러 열을 기반으로 사용자 순위를 매기는 방법은 무엇입니까?

MySQL의 여러 열을 기반으로 사용자 순위를 매기는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-29 09:45:10
원래의
279명이 탐색했습니다.

How to Rank Users Based on Multiple Columns in MySQL?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿