ホームページ >データベース >mysql チュートリアル >SQLite でデータをロング形式からワイド形式にピボットする方法?
データベース管理において、ピボットとは、データをロング形式 (各行が複数の属性を持つ単一の観測値を表す) からワイド形式 (各行が異なる属性を表し、列がそれらの値を表す) に変換する方法です。属性) ) テクノロジー。この手順は、(以下に示すように) 長い形式でデータを保存するテーブルを操作する場合に特に便利です。
<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 サイトの他の関連記事を参照してください。