ホームページ >データベース >mysql チュートリアル >グループ化に基づいてテーブル内の行に連番を割り当てる方法
グループごとにテーブル内の行に自動番号を付ける
このガイドでは、テーブル内のグループ内の行に連続番号を自動的に割り当てる方法を説明します。具体的には、グループ化が 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 中国語 Web サイトの他の関連記事を参照してください。