>데이터 베이스 >MySQL 튜토리얼 >MySQL의 그룹 내에서 행 번호를 생성하는 방법은 무엇입니까?

MySQL의 그룹 내에서 행 번호를 생성하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-11 17:45:021007검색

How to Generate Row Numbers Within Groups in MySQL?

MySQL 그룹 내 행 번호

문제:

MySQL 쿼리를 생성하여 각 그룹에 대한 행 번호를 생성합니다. Crew_id 및 type과 같은 두 가지 필드를 기반으로 한 레코드입니다. Crew_id 및 유형의 새로운 조합마다 행 번호를 재설정해야 합니다.

샘플 데이터:

id   crew_id   amount    type
 1      4       1000      AUB
 2      4       1500      AUB
 3      5       8000      CA
 4      4       1000      CA
 5      5       1000      AUB
 6      6       3000      AUB
 7      4       2000      CA
 8      6       3500      AUB
 9      4       5000      AUB
 10     5       9000      CA
 11     5       1000      CA

원함 출력:

id    crew_id   amount   type    row_number
 1      4       1000      AUB        1    
 2      4       1500      AUB        2 
 9      4       5000      AUB        3
 4      4       1000      CA         1
 7      4       2000      CA         2
 5      5       1000      AUB        1
 3      5       8000      CA         1
 10     5       9000      CA         2
 11     5       1000      CA         3
 6      6       3000      AUB        1
 6      6       3000      AUB        2

해결책:

원하는 행 번호를 얻으려면 하위 쿼리와 CASE 문을 조합하여 활용할 수 있습니다.

SELECT    id,
          crew_id,
          amount,
          type,
         ( 
            CASE type 
            WHEN @curType 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curType := type END
          ) + 1 AS rank
FROM      Table1 p,
          (SELECT @curRow := 0, @curType := '') r
ORDER BY  crew_id,type asc;

이 쿼리에서:

  • 하위 쿼리(SELECT @curRow := 0, @curType := '') r은 두 개의 사용자 정의 변수인 @curRow를 0으로, @curType을 빈 문자열로 초기화합니다.
  • CASE 문은 외부 SELECT 쿼리는 유형 열을 @curType과 비교하여 현재 행이 동일한 그룹에 속하는지 확인합니다.

    • 유형이 다음과 같은 경우 @curType, @curRow는 1씩 증가합니다.
    • 유형이 @curType과 다른 경우 @curRow는 1로 재설정되고 @curType은 현재 유형 값으로 업데이트됩니다.
  • 계산된 값에 1을 더해 행 번호를 생성합니다.
  • 결과 집합은 다음과 같이 정렬됩니다. Crew_id를 입력하고 오름차순으로 입력하세요.

위 내용은 MySQL의 그룹 내에서 행 번호를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.