> 데이터 베이스 > MySQL 튜토리얼 > 여러 열을 기반으로 MySQL에서 행 순위를 지정하는 방법은 무엇입니까?

여러 열을 기반으로 MySQL에서 행 순위를 지정하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-30 08:14:09
원래의
405명이 탐색했습니다.

How to Rank Rows in MySQL Based on Multiple Columns?

MySQL의 여러 열을 기반으로 순위 결정

쿼리:

행을 기반으로 순위를 지정하려면 game_detail_sum의 내림차순을 고려하면서 여러 열(user_id 및 game_id)에 대해 하위 쿼리와 조건부 CASE 표현식을 사용할 수 있습니다:

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 
로그인 후 복사

설명:

  1. 하위 쿼리는 각 user_id에 대해 game_detail_sum의 내림차순으로 행을 정렬합니다.
  2. 외부 쿼리는 사용자 정의 변수 @r(행 순위)을 사용하고 @u(이전 user_id)를 사용하여 행 번호를 할당합니다.

MySQL 8 Row_Number() 함수로 향상된 쿼리:

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;
로그인 후 복사

추가 참고 사항:

  • 원래 접근 방식에서는 동일한 쿼리에 ORDER BY 및 사용자 변수를 사용하면 올바른 결과가 보장되지 않을 수 있습니다. 최적화 프로그램의 예측할 수 없는 평가 순서에 적용됩니다.
  • Row_Number()를 사용하여 향상된 쿼리가 더 성능이 좋습니다. MySQL 8에서는 예측 가능한 결과를 제공합니다.

위 내용은 여러 열을 기반으로 MySQL에서 행 순위를 지정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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