Utilisez Tablefunc pour implémenter un pivot de données multi-colonnes
La fonction crosstab()
de SQL est souvent utilisée pour convertir des données au format long en données au format large. Cependant, il suppose généralement que les colonnes, à l'exception des colonnes de nom de ligne et de valeur, sont les mêmes pour chaque ligne portant le même nom de ligne. Cette limitation peut créer des difficultés lorsque vous travaillez avec des ensembles de données comportant des colonnes supplémentaires variables.
Une façon de gérer les pivots multivariés consiste à créer un tableau temporaire avec une colonne de nom de ligne et toutes les colonnes supplémentaires requises. Ensuite, utilisez la fonction crosstab()
pour faire pivoter les données, en utilisant la colonne de nom de ligne comme colonne de regroupement principale et les colonnes supplémentaires comme colonnes de regroupement supplémentaires.
Par exemple, considérons les exemples de données suivants :
<code class="language-sql">CREATE TEMP TABLE t4 ( timeof timestamp ,entity character ,status integer ,ct integer); INSERT INTO t4 VALUES ('2012-01-01', 'a', 1, 1) ,('2012-01-01', 'a', 0, 2) ,('2012-01-02', 'b', 1, 3) ,('2012-01-02', 'c', 0, 4);</code>
Pour faire pivoter ces données à l'aide de plusieurs variables, vous pouvez utiliser la requête suivante :
<code class="language-sql">SELECT * FROM crosstab( 'SELECT entity, timeof, status, ct FROM t4 ORDER BY 1, 2, 3' ,$$VALUES (1), (0)$$) AS ct ("Attribute" character, "Section" timestamp, "status_1" int, "status_0" int);</code>
Cette requête regroupe les données par colonnes entity
et timeof
, puis pivote sur les colonnes status
et ct
en tant que colonnes supplémentaires. Le tableau généré sera au format suivant :
<code>Section | Attribute | status_1 | status_0 2012-01-01 00:00:00 | a | 1 | 2 2012-01-02 00:00:00 | b | 3 | 2012-01-02 00:00:00 | c | | 4</code>
Comme nous pouvons le constater, les colonnes supplémentaires Attribute
sont désormais affichées sous forme de colonnes distinctes, nous permettant de comparer facilement les différentes mesures prises sur chaque entité à un instant donné.
En résumé, l'utilisation de la fonction crosstab()
avec une table temporaire peut fournir une méthode personnalisée et efficace de pivotement multivarié. En contrôlant l'ordre des colonnes, nous pouvons déterminer quelles colonnes sont considérées comme des noms de lignes, des colonnes supplémentaires, des colonnes de catégories et des colonnes de valeurs.
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!