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