これは基本的に ピボットテーブル。
これを実現するための優れたチュートリアルは、次の場所にあります。 http:// www.artfulsoftware.com/infotree/qrytip.php?id=78
この投稿を読んで、このソリューションをニーズに合わせて調整することをお勧めします。
更新
上記のリンクが現在利用できなくなった後、ここでmysqlピボットの回答を検索しているすべての人に追加情報を提供する義務があると感じています。本当に膨大な量の情報があり、そこからすべてをここに入れることはしません(彼らの膨大な知識をコピーしたくないので、さらに多く)が、ピボットに対処する方法についてアドバイスしますそもそも質問をしたpekuの例を使用して、SQLの方法を一般的に表にします。
リンクがすぐに戻ってくるかもしれません。私はそれを監視します。
スプレッドシートの方法...
多くの人は、この目的のために、MSExcel、OpenOffice、その他のスプレッドシートツールなどのツールを使用しています。これは有効な解決策です。そこにあるデータをコピーし、GUIが提供するツールを使用してこれを解決してください。
しかし...これは問題ではありませんでした。データをスプレッドシートに取り込む方法や問題のあるスケーリングなど、いくつかの欠点につながる可能性もあります。
SQLの方法...
彼のテーブルは次のようになります:
CREATE TABLE `test_pivot` (
`pid` bigint(20) NOT NULL AUTO_INCREMENT,
`company_name` varchar(32) DEFAULT NULL,
`action` varchar(16) DEFAULT NULL,
`pagecount` bigint(20) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=MyISAM;
次に、彼/彼女の希望するテーブルを調べます:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
行( EMAIL
、PRINTxページ
)条件に似ています。主なグループ化はcompany_name
によるものです 。
条件を設定するために、これは ケースコード>
-声明。何かでグループ化するには、... GROUP BY
を使用します。 。
このピボットを提供する基本的なSQLは、次のようになります。
SELECT P.`company_name`,
COUNT(
CASE
WHEN P.`action`='EMAIL'
THEN 1
ELSE NULL
END
) AS 'EMAIL',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '1'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 1 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '2'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 2 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '3'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 3 pages'
FROM test_pivot P
GROUP BY P.`company_name`;
これにより、目的の結果が非常に速く提供されます。このアプローチの主な欠点は、ピボットテーブルに必要な行が多いほど、SQLステートメントで定義する必要のある条件が増えることです。
これも処理できるため、プリペアドステートメント、ルーチン、カウンターなどを使用する傾向があります。
このトピックに関するいくつかの追加リンク:
- http://anothermysqldba.blogspot。 de / 2013/06 / plugin-tables-example-in-mysql.html
- http://www.codeproject。 com / Articles / 363339 / Cross-Tabulation-Pivot-Tables-with-MySQL
- http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf
- https://codingsight.com/pivot-tables-in-mysql/