Ini pada dasarnya adalah tabel pivot.
Tutorial yang bagus tentang cara mencapai ini dapat ditemukan di sini:http:// www.artfulsoftware.com/infotree/qrytip.php?id=78
Saya menyarankan untuk membaca posting ini dan menyesuaikan solusi ini dengan kebutuhan Anda.
Pembaruan
Setelah link di atas saat ini tidak tersedia lagi saya merasa berkewajiban untuk memberikan beberapa informasi tambahan untuk Anda semua yang mencari jawaban pivot mysql di sini. Itu benar-benar memiliki sejumlah besar informasi, dan saya tidak akan memasukkan semuanya dari sana di sini (bahkan lebih karena saya tidak ingin menyalin pengetahuan mereka yang luas), tetapi saya akan memberikan beberapa saran tentang cara menangani pivot tabel cara sql umumnya dengan contoh dari peku yang mengajukan pertanyaan di tempat pertama.
Mungkin tautannya akan segera kembali, saya akan mengawasinya.
Cara spreadsheet...
Banyak orang hanya menggunakan alat seperti MSExcel, OpenOffice atau alat spreadsheet lainnya untuk tujuan ini. Ini adalah solusi yang valid, cukup salin data di sana dan gunakan alat yang ditawarkan GUI untuk menyelesaikannya.
Tapi... ini bukan pertanyaannya, dan bahkan mungkin menimbulkan beberapa kerugian, seperti cara memasukkan data ke dalam spreadsheet, penskalaan bermasalah, dan sebagainya.
Cara SQL...
Mengingat tabelnya terlihat seperti ini:
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;
Sekarang lihat tabel yang diinginkannya:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
Baris (EMAIL
, PRINT x pages
) menyerupai kondisi. Pengelompokan utama adalah dengan company_name
.
Untuk mengatur kondisi ini agak berteriak untuk menggunakan CASE
-penyataan. Untuk mengelompokkan berdasarkan sesuatu, gunakan ... GROUP BY
.
SQL dasar yang menyediakan pivot ini dapat terlihat seperti ini:
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`;
Ini harus memberikan hasil yang diinginkan dengan sangat cepat. Kelemahan utama dari pendekatan ini, semakin banyak baris yang Anda inginkan dalam tabel pivot Anda, semakin banyak kondisi yang perlu Anda tentukan dalam pernyataan SQL Anda.
Hal ini dapat diatasi juga, oleh karena itu orang cenderung menggunakan pernyataan yang sudah disiapkan, rutinitas, penghitung, dan semacamnya.
Beberapa tautan tambahan tentang topik ini:
- http://anothermysqldba.blogspot. de/2013/06/pivot-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/