MySQL でピボット テーブル出力を実装する方法
P粉481035232
2023-08-21 16:06:24
<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><code>pagecount</code> は変化する可能性があるため、出力の列数はそれを反映し、<code>action</code>/<code>pagecount< ごとに 1 つずつ反映される必要があるという考えです。 ;/code> 列、次に各 <code>company_name</code> のクリック数。これがピボットテーブルと呼ばれるかどうかはわかりませんが、誰かがこれを提案しましたか? </p>
私の解決策は、ピボットなしで T-SQL を使用することです:
リーリーこれは基本的にピボット テーブルです。
この関数の実装方法に関する詳細なチュートリアルは、次の場所にあります: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
この記事を読んで、ニーズに合わせてソリューションを適応させることをお勧めします。
更新
上記のリンクは現在利用できなくなっているため、ここで mysql ピボット テーブルの答えを探している人のために追加情報を提供する必要があると感じました。これには多くの情報が含まれているので、すべてをここにコピーするつもりはありません (言うまでもなく、彼らの膨大な知識をコピーしたくありません)。しかし、SQL でピボット テーブルを操作する方法についていくつかの提案をします。 peku が提起した質問はその一例です。
たぶんリンクはすぐに復元されるでしょう、私はそれをたどり続けます。
スプレッドシートメソッド...
多くの人は、この目的のために MSExcel、OpenOffice などのスプレッドシート ツールを使用するだけです。これは有効な解決策です。そこにデータをコピーし、GUI が提供するツールを使用して問題を解決するだけです。
しかし...これは問題の核心ではなく、データをスプレッドシートにインポートする方法やスケーリングの問題など、いくつかの欠点につながる可能性さえあります。
SQL 方法...
彼のテーブルが次のようになっていると仮定します:
リーリー次に、彼/彼女が希望するテーブルを見てください:
リーリー行 (
EMAIL
、PRINT x ページ
) は条件を表します。主なグループはcompany_name
ごとにグループ化されます。条件を設定するには、
CASE
ステートメントを使用することに似ています。何かでグループ化するには...GROUP BY
を使用します。このピボット テーブルを提供する基本的な SQL は次のようになります:
リーリーこれにより、望ましい結果がすぐに得られるはずです。このアプローチの主な欠点は、ピボット テーブルにさらに多くの行を含める場合、SQL ステートメントでより多くの条件を定義する必要があることです。
これも処理できるため、準備されたステートメント、ルーチン、カウンターなどを使用する傾向があります。
このトピックに関する追加リンク: