Maison > base de données > tutoriel mysql > Comment attribuer des numéros de ligne séquentiels dans des groupes partitionnés dans SQL ?

Comment attribuer des numéros de ligne séquentiels dans des groupes partitionnés dans SQL ?

DDD
Libérer: 2024-12-22 12:27:15
original
695 Les gens l'ont consulté

How to Assign Sequential Row Numbers Within Partitioned Groups in SQL?

Numérotation séquentielle des lignes dans des groupes partitionnés dans SQL

Question :

Comment pouvez-vous attribuer numéros de ligne séquentiels dans chaque groupe de clés dans une table SQL utilisant un attribut spécifique comme partitionnement facteur ?

Partitionnement par groupe de clés :

L'objectif est d'incrémenter un numéro de ligne de manière séquentielle pour chaque valeur unique dans une colonne clé désignée ou une combinaison de colonnes. Par exemple, si la table contient des tuples de (CODE, NAME), vous souhaiterez attribuer des numéros séquentiels aux lignes avec la même valeur CODE, comme illustré ci-dessous :

Tableau d'origine :

CODE NAME
A Apple
A Angel
A Arizona
B Bravo
C Charlie
C Cat
D Dog
D Doppler
D Data
D Down

Résultat souhaité avec des numéros de lignes séquentiels partitionnés par CODE :

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

Implémentation :

Plusieurs dialectes SQL prennent en charge cette fonctionnalité via la fonction analytique ROW_NUMBER() OVER() :

SQL Serveur :

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

Oracle :

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

Pos tgres :

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

Sybase :

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

MySQL 8.0 :

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

MariaDB 10.2 :

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

SQLite 3.25 :

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

En utilisant ces requêtes, vous pouvez attribuer efficacement des numéros de ligne séquentiels au sein de chaque groupe de clés de votre Table SQL.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal