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
DDDoriginal
2024-12-22 12:27:15693parcourir

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

Oracle :

SELECT
    CODE,
    RANK() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
    NAME
FROM
    MyTable

Pos tgres :

SELECT
    CODE,
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
    NAME
FROM
    MyTable

Sybase :

SELECT
    CODE,
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
    NAME
FROM
    MyTable

MySQL 8.0 :

SELECT
    CODE,
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
    NAME
FROM
    MyTable

MariaDB 10.2 :

SELECT
    CODE,
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
    NAME
FROM
    MyTable

SQLite 3.25 :

SELECT
    CODE,
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
    NAME
FROM
    MyTable

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!

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