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!