Maison >base de données >tutoriel mysql >Comment attribuer des numéros séquentiels aux lignes d'un tableau en fonction de regroupements ?

Comment attribuer des numéros séquentiels aux lignes d'un tableau en fonction de regroupements ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-07 19:32:43537parcourir

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

Numérotation automatique des lignes dans un tableau par groupe

Ce guide montre comment attribuer automatiquement des numéros séquentiels aux lignes au sein des groupes d'un tableau, en s'adressant spécifiquement au tableau address_history où le regroupement est basé sur la colonne person_id. Bien que plusieurs méthodes existent, nous nous concentrerons sur l'utilisation d'une colonne série et d'une fonction fenêtre.

Méthode 1 : Utiliser une colonne série (recommandée)

L'approche la plus simple consiste à exploiter une colonne série ou IDENTITÉ. Cela génère automatiquement des numéros séquentiels uniques.

<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>

La colonne SERIAL (address_history_id) s'incrémente automatiquement, fournissant la numérotation séquentielle souhaitée pour chaque ligne.

Méthode 2 : Utiliser une fonction de fenêtre (alternative)

Si une colonne série n'est pas réalisable, une fonction de fenêtre propose une solution. Cette méthode crée une vue qui ajoute une colonne de numéros séquentiels.

<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>

Cela génère une vue (address_history_nr) contenant une colonne supplémentaire (adr_nr) avec des numéros séquentiels au sein de chaque person_id groupe. Cette vue remplace la table dans les requêtes.

Remarques importantes :

  • Types de données : Utilisez TIMESTAMP WITH TIME ZONE pour les champs d'horodatage pour une meilleure gestion des fuseaux horaires.
  • Redondance des données : Pensez à stocker uniquement les previous_address. Conserver les adresses actuelles et précédentes peut entraîner des incohérences dans les données.

Cette approche garantit une numérotation séquentielle efficace et précise au sein des groupes, améliorant ainsi la gestion des données et les performances des requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn