MySQL でピボット テーブルの出力を返すにはどうすればよいですか?
P粉578343994
2023-07-25 13:59:22
<p>次のような MySQL テーブルがある場合: </p>
<pre>company_name アクションのページ数
----------------------------------
A社プリント3
A社プリント2
A社プリント3
会社概要
B社プリント2
B社プリント2
B 社 印刷 1
A社プリント3
</pre>
<p>MySQL クエリを実行して次の出力を取得できますか: </p>
<pre>company_name 電子メール 印刷 1 ページ 印刷 2 ページ 印刷 3 ページ
-------------------------------------------------- ----------
A社 0 0 1 3
B 社 1 1 2 0
</pre>
<p>ページ数は変化する可能性があるため、出力の列数はこれを反映し、アクション/ページ数ごとに 1 つの列を作成し、会社名ごとのクリック数をカウントするという考えです。これをピボットテーブルと呼ぶかどうかはわかりませんが、誰かがこれを行うことを提案しました。 </p>
私の解決策は、ピボット テーブルの代わりに T-SQL を使用することです:
リーリーこれは基本的にピボット テーブルです。
これを実装する方法に関する詳細なチュートリアルは、次の場所にあります: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
この記事を読むことをお勧めします。自分のニーズに合わせて調整してください。
UPDATE
上記のリンクは現在利用できなくなっているため、MySQL ピボット テーブルの答えを探している人のために追加情報をここで提供する必要があると感じました。このリンクには本当に多くの情報が含まれています。すべてをコピーするつもりはありません (そして、彼らの豊富な知識をコピーするつもりはありません)。ただし、SQL でピボット テーブルを操作する方法についていくつかのアドバイスを提供します。 peku 提起された質問を例に考えてみましょう。
もしかしたらリンクはすぐに復活するかもしれないので、注目してみます。
スプレッドシートの方法...
多くの人は、MSExcel、OpenOffice、またはその他のスプレッドシート ツールなどのツールを使用して、このタスクを実行します。これは有効な解決策です。そこにデータをコピーし、GUI が提供するツールを使用して問題を解決するだけです。
しかし...これは問題の核心ではなく、データをスプレッドシートにインポートする方法やスケーラビリティの問題など、いくつかの欠点につながる可能性さえあります。
SQL の方法...
テーブルが次のようになっているとします:
リーリー次に、予想されるテーブルを見てください:
リーリー行 (電子メール、x ページを印刷) は条件に似ています。主なグループ分けは会社名によって行われます。
条件を設定するには、CASE ステートメントを使用するのが適しています。何かでグループ化するには、GROUP BY を使用できます。
このピボット テーブルを提供する基本的な SQL ステートメントは次のようになります:
リーリーこれにより、望ましい結果がすぐに得られるはずです。このアプローチの主な欠点は、ピボット テーブルに必要な行が増えるほど、SQL ステートメントで定義する必要がある条件が増えることです。
この問題も解決できるため、準備されたステートメント、ルーチン、カウンターなどを使用する傾向があります。
このトピックに関する追加リンクは次のとおりです: