Utilisez tablefunc pour le pivotement multi-colonnes
Question :
Comment utiliser tablefunc pour pivoter sur plusieurs variables au lieu de simplement les noms de lignes ?
Contexte :
Les ensembles de données contenant des milliards de lignes doivent être pivotés dans un format large afin de comparer efficacement plusieurs mesures prises sur de nombreuses entités. Ces mesures varient considérablement, ce qui nécessite une conversion fréquente des données dans un format large.
Question :
L'approche tablefunc standard suppose que les colonnes d'attributs (alias colonnes "supplémentaires") sont cohérentes pour chaque nom de ligne. Si plusieurs valeurs existent pour une colonne d'attribut dans un nom de ligne, seule la première valeur est signalée, ce qui entraîne des données incomplètes dans la sortie du pivot.
Solution :
Pour surmonter cette limitation, vous devez réorganiser les colonnes de requête et placer la colonne d'attribut avant la colonne de nom de ligne. Cela garantit que les valeurs d'attribut sont renseignées à partir de la première ligne de chaque partition de nom de ligne, capturant ainsi toutes les différentes valeurs d'attribut pour ce nom de ligne.
Code :
<code class="language-sql">SELECT * FROM crosstab( 'SELECT entity, timeof, status, ct FROM t4 ORDER BY entity' , 'VALUES (1), (0)' ) AS ct ( "Attribute" character , "Section" timestamp , "status_1" int , "status_0" int );</code>
Résumé :
En inversant l'ordre des deux premières colonnes (colonnes d'attributs avant les colonnes de nom de ligne), tablefunc peut pivoter efficacement sur plusieurs variables, fournissant une sortie pivot complète. Cette approche fonctionne bien lorsque l'ensemble de données contient un nombre différent de valeurs d'attribut par nom de ligne.
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!