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
Susan Sarandonoriginal
2024-12-27 21:22:10224parcourir

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

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;

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

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!

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