Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana saya bisa mengembalikan output tabel pivot di MySQL?

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan antara VARCHAR dan TEXT di MySQL

  2. Hubungkan Dengan Setara Sebelumnya untuk MySQL

  3. Bagaimana cara memilih hanya tanggal dari bidang DATETIME di MySQL?

  4. Bagaimana menemukan tabel terbesar di database MySQL?

  5. Bergabung antara tabel dalam dua database yang berbeda?