> 데이터 베이스 > MySQL 튜토리얼 > 그룹화를 기반으로 테이블의 행에 일련 번호를 할당하는 방법은 무엇입니까?

그룹화를 기반으로 테이블의 행에 일련 번호를 할당하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-07 19:32:43
원래의
533명이 탐색했습니다.

How to Assign Sequential Numbers to Rows in a Table Based on Groupings?

그룹별 테이블 행 자동 번호 매기기

이 가이드에서는 특히 그룹화가 address_history 열을 기반으로 하는 person_id 테이블의 주소를 지정하여 테이블의 그룹 내 행에 순차적 번호를 자동으로 할당하는 방법을 보여줍니다. 여러 가지 방법이 있지만 여기서는 직렬 컬럼과 윈도우 함수를 사용하는 데 중점을 두겠습니다.

방법 1: 직렬 컬럼 사용(권장)

가장 간단한 접근 방식은 직렬 또는 IDENTITY 열을 활용하는 것입니다. 그러면 고유한 연속 번호가 자동으로 생성됩니다.

<code class="language-sql">CREATE TABLE address_history (
  address_history_id SERIAL PRIMARY KEY,
  person_id INT NOT NULL REFERENCES people(id),
  created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  previous_address TEXT
);</code>
로그인 후 복사

SERIAL 열(address_history_id)은 자동으로 증가하여 각 행에 원하는 일련 번호를 부여합니다.

방법 2: 창 함수 사용(대체)

직렬 열이 가능하지 않은 경우 창 기능이 솔루션을 제공합니다. 순차번호 컬럼을 추가하는 뷰를 생성하는 메소드입니다.

<code class="language-sql">CREATE VIEW address_history_nr AS
SELECT *, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY address_history_id) AS adr_nr
FROM   address_history;</code>
로그인 후 복사

이렇게 하면 각 address_history_nr 그룹 내에 일련 번호가 있는 추가 열(adr_nr)이 포함된 뷰(person_id)가 생성됩니다. 이 뷰는 쿼리에서 테이블을 대체하는 역할을 합니다.

중요 사항:

  • 데이터 유형: 더 나은 시간대 처리를 위해 타임스탬프 필드에 TIMESTAMP WITH TIME ZONE를 사용하세요.
  • 데이터 중복성: previous_address만 저장하는 것이 좋습니다. 현재 주소와 이전 주소를 모두 유지하면 데이터 불일치가 발생할 수 있습니다.

이 접근 방식은 그룹 내에서 효율적이고 정확한 순차 번호 지정을 보장하여 데이터 관리 및 쿼리 성능을 향상시킵니다.

위 내용은 그룹화를 기반으로 테이블의 행에 일련 번호를 할당하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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