Maison > base de données > tutoriel mysql > Comment faire pivoter les données des notes des étudiants du format long au format large dans SQLite ?

Comment faire pivoter les données des notes des étudiants du format long au format large dans SQLite ?

Barbara Streisand
Libérer: 2025-01-10 12:46:42
original
281 Les gens l'ont consulté

How to Pivot Student Marks Data from Long to Wide Format in SQLite?

Structure de tableau croisé dynamique dans SQLite

Introduction :

L'aplatissement des données, également connu sous le nom de format long, est une méthode courante de stockage de données dans SQLite. Cependant, il est parfois nécessaire de convertir ces données dans un format large, où chaque ligne représente une matière et les colonnes représentent les scores de cette matière pour un élève spécifique. Ce processus est appelé perspective.

Énoncé du problème :

Vous disposez de deux tableaux, l'un qui stocke les données des étudiants (étudiant, nom) et l'autre qui stocke leurs scores dans différentes matières (étudiant, sujet, notes). La tâche consiste à récupérer les informations sur les étudiants dans un format large où chaque ligne représente un étudiant et les colonnes représentent leurs notes dans une matière spécifique.

Solution utilisant CASE et 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>
Copier après la connexion

Cette solution utilise l'instruction CASE dans la fonction d'agrégation SUM(). Pour chaque identifiant de sujet (3, 4, 5), il vérifie si le tableau markdetails contient une ligne correspondante et additionne les scores correspondants. La clause GROUP BY garantit que les résultats sont regroupés par numéro d'identification et nom d'étudiant.

Solution alternative utilisant la jointure externe gauche :

<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>
Copier après la connexion

Cette solution alternative utilise un LEFT OUTER JOIN pour faire correspondre les étudiants avec leurs scores respectifs dans le tableau markdetails. Pour les étudiants qui n'ont pas de scores dans une matière spécifique, les colonnes de scores (subjectid_3, subjectid_4, subjectid_5) seront renvoyées comme NULL.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal