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

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

Susan Sarandon
Susan Sarandonoriginal
2025-01-10 12:51:46481parcourir

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

Pivot de base de données SQLite : convertir des données au format long en données au format large

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!

Déclaration:
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