ホームページ >データベース >mysql チュートリアル >SQLite でデータをロング形式からワイド形式にピボットする方法?

SQLite でデータをロング形式からワイド形式にピボットする方法?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-10 12:51:46518ブラウズ

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

SQLite Database Pivot: ロングフォーマットデータをワイドフォーマットデータに変換します

データベース管理において、ピボットとは、データをロング形式 (各行が複数の属性を持つ単一の観測値を表す) からワイド形式 (各行が異なる属性を表し、列がそれらの値を表す) に変換する方法です。属性) ) テクノロジー。この手順は、(以下に示すように) 長い形式でデータを保存するテーブルを操作する場合に特に便利です。

<code>## studid ## ## subjectid ##  ## marks ##
A1            3                50
A1            4                60
A1            5                70
B1            3                60
B1            4                80
C1            5                95</code>

質問:

目標は、上の表を、各生徒の名前と科目ごとの得点を表す行が含まれる広い形式に変換することです。目的の出力は次のようになります:

<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>

CASE ステートメントと GROUP BY 句を使用した解決策:

SQLite でこれを実現する 1 つの方法は、CASE ステートメントを 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>

左外部結合を使用した解決策:

別のアプローチでは、左外部結合を使用して生徒の情報と各科目のスコアを結合します。

<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>
どちらの SQL クエリも必要なワイド形式のテーブルを生成するため、データの分析と視覚化が容易になります。

以上がSQLite でデータをロング形式からワイド形式にピボットする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。