Maison >base de données >tutoriel mysql >Comment faire pivoter les données du format long au format large dans SQLite ?
Dans la gestion de bases de données, le pivotement est une méthode de conversion des données du format long (où chaque ligne représente une seule observation avec plusieurs attributs) au format large (où chaque ligne représente un attribut différent et les colonnes représentent les valeurs de ceux-ci). attributs) ) technologie. Cette procédure est particulièrement utile lorsque vous travaillez avec des tables qui stockent des données au format long (comme indiqué ci-dessous) :
<code>## studid ## ## subjectid ## ## marks ## A1 3 50 A1 4 60 A1 5 70 B1 3 60 B1 4 80 C1 5 95</code>
Question :
Le but est de convertir le tableau ci-dessus dans un format large où chaque élève dispose d'une ligne représentant son nom et son score pour chaque matière. Le résultat souhaité devrait ressembler à ceci :
<code>## studid ## ## name## ## subjectid_3 ## ## subjectid_4 ## ## subjectid_5 ## A1 Raam 50 60 70 B1 Vivek 60 80 NULL C1 Alex NULL NULL 95</code>
Solution utilisant l'instruction CASE et la clause GROUP BY :
Une façon d'y parvenir dans SQLite consiste à utiliser une instruction CASE en combinaison avec une clause GROUP BY :
<code class="language-sql">SELECT si.studid, si.name, SUM(CASE WHEN md.subjectid = 3 THEN md.marks END) AS subjectid_3, SUM(CASE WHEN md.subjectid = 4 THEN md.marks END) AS subjectid_4, SUM(CASE WHEN md.subjectid = 5 THEN md.marks END) AS subjectid_5 FROM student_info si JOIN markdetails md ON md.studid = si.studid GROUP BY si.studid, si.name;</code>
Solution utilisant la jointure externe gauche :
Une autre approche consiste à utiliser une jointure externe gauche pour combiner les informations sur les étudiants et les scores pour chaque matière :
<code class="language-sql">SELECT u.stuid, u.name, s3.marks AS subjectid_3, s4.marks AS subjectid_4, s5.marks AS subjectid_5 FROM student_info u LEFT OUTER JOIN markdetails s3 ON u.stuid = s3.stuid AND s3.subjectid = 3 LEFT OUTER JOIN markdetails s4 ON u.stuid = s4.stuid AND s4.subjectid = 4 LEFT OUTER JOIN markdetails s5 ON u.stuid = s5.stuid AND s5.subjectid = 5;</code>
Les deux requêtes SQL généreront les tableaux grand format requis, ce qui facilitera l'analyse et la visualisation des données.
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!