Maison > base de données > tutoriel mysql > Comment numéroter séquentiellement des lignes au sein de groupes en SQL ?

Comment numéroter séquentiellement des lignes au sein de groupes en SQL ?

Susan Sarandon
Libérer: 2024-12-27 21:22:10
original
223 Les gens l'ont consulté

How to Sequentially Number Rows within Groups in SQL?

Numérotation séquentielle des lignes par groupe de clés en SQL

La tâche de numérotation séquentielle des lignes regroupées par une clé spécifique en SQL est une exigence courante dans informatique. Pour y parvenir, diverses bases de données SQL offrent des fonctions et des techniques natives qui permettent une numérotation de lignes efficace et précise au sein de chaque groupe de clés.

Implémentation dans différentes bases de données

De nombreuses bases de données SQL populaires les bases de données fournissent des fonctions ou des extensions intégrées pour la numérotation séquentielle des lignes :

  • SQL Serveur : ROW_NUMBER() OVER (PARTITION BY ...)
  • Oracle : ROW_NUMBER() OVER (PARTITION BY ...)
  • Postgres : ROW_NUMBER() OVER (PARTITION BY ...)
  • Sybase : ROW_NUMBER() OVER (PARTITION PAR ...)
  • MySQL 8.0 : ROW_NUMBER() OVER (PARTITION PAR ...)
  • MariaDB 10.2 : ROW_NUMBER() OVER (PARTITION BY ...)
  • SQLite 3.25 : ROW_NUMBER() OVER (PARTITION BY ...)

Exemple Requête

Considérons l'exemple de table suivant avec des tuples regroupés par le CODE colonne :

CODE | NAME
------|------
A     | Apple
A     | Angel
A     | Arizona
B     | Bravo
C     | Charlie
C     | Cat
D     | Dog
D     | Data
D     | Down
D     | Doppler
Copier après la connexion

Pour numéroter séquentiellement les lignes de chaque groupe CODE, la requête suivante peut être utilisée :

SELECT
    CODE,
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 AS C_NO,
    NAME
FROM
    MyTable;
Copier après la connexion

Sortie

Le la requête produira la sortie suivante, avec des lignes numérotées séquentiellement dans chaque CODE group :

CODE | C_NO | NAME
------|------|------
A     | 0    | Apple
A     | 1    | Angel
A     | 2    | Arizona
B     | 0    | Bravo
C     | 1    | Charlie
C     | 0    | Cat
D     | 0    | Dog
D     | 1    | Data
D     | 2    | Down
D     | 3    | Doppler
Copier après la connexion

Remarque :

La fonction ROW_NUMBER() commence la numérotation à partir de 1 par défaut. Pour s'aligner sur le résultat souhaité, l'expression ROW_NUMBER() OVER (PARTITION BY ...) - 1 est utilisée pour décaler la numérotation de base 1 à base 0.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal