Bagaimana untuk menjana output jadual pangsi dalam MySQL?
P粉180844619
P粉180844619 2023-08-22 10:54:31
0
2
422
Jika saya mempunyai jadual MySQL seperti ini: <pra>bilangan halaman tindakan nama_syarikat ---------------------------------- CETAKAN SYARIKAT 3 CETAKAN SYARIKAT 2 CETAKAN SYARIKAT 3 Syarikat BEMAIL Syarikat B CETAKAN 2 Syarikat B CETAKAN 2 SYARIKAT B CETAKAN 1 CETAKAN SYARIKAT 3 </pra> Adakah mungkin untuk menjalankan pertanyaan MySQL untuk mendapatkan output seperti ini: <pra>nama_syarikat CETAK EMEL 1 halaman CETAK 2 halaman CETAK 3 halaman ------------------------------------------------- ---------- SyarikatA 0 0 1 3 SyarikatB 1 1 2 0 </pra> Ideanya ialah <code>pagecount</code> mungkin berubah, jadi bilangan lajur dalam output harus mencerminkan ini, satu lajur untuk setiap <code>action</code>/<code>pagecount</code> ; , dan kemudian hitung bilangan hits untuk setiap <kod>nama_syarikat</kod>. Saya tidak pasti sama ada ini dipanggil jadual pangsi, tetapi seseorang mencadangkan ini
P粉180844619
P粉180844619

membalas semua(2)
P粉696891871

Penyelesaian saya ialah menggunakan T-SQL tanpa sebarang pivot:

SELECT
    CompanyName,  
    SUM(CASE WHEN (action='EMAIL') THEN 1 ELSE 0 END) AS Email,
    SUM(CASE WHEN (action='PRINT' AND pagecount=1) THEN 1 ELSE 0 END) AS Print1Pages,
    SUM(CASE WHEN (action='PRINT' AND pagecount=2) THEN 1 ELSE 0 END) AS Print2Pages,
    SUM(CASE WHEN (action='PRINT' AND pagecount=3) THEN 1 ELSE 0 END) AS Print3Pages
FROM 
    Company
GROUP BY 
    CompanyName
P粉608647033

Ini pada asasnya jadual pangsi.

Tutorial terperinci tentang cara melaksanakan ini boleh didapati di sini: http://www.artfulsoftware.com/infotree/qrytip.php?id=78

Saya mengesyorkan membaca artikel ini dan menyesuaikan penyelesaian ini mengikut keperluan anda.

Dikemas kini

Memandangkan pautan di atas tidak lagi tersedia buat masa ini, saya rasa bertanggungjawab untuk memberikan beberapa maklumat tambahan bagi sesiapa yang mencari jawapan kepada jadual pangsi mysql di sini. Ia mempunyai banyak maklumat, dan saya tidak akan menyalin segala-galanya di sini (apatah lagi saya tidak mahu menyalin pengetahuan mereka yang luas), tetapi saya akan memberi nasihat tentang cara bekerja dengan jadual pangsi dengan cara SQL, dan pertama Contoh peku yang bertanya soalan.

Mungkin pautan akan kembali tidak lama lagi, saya akan memerhatikannya.

Kaedah hamparan...

Ramai orang hanya menggunakan alat hamparan seperti MSExcel, OpenOffice atau lain-lain untuk tujuan ini. Ini adalah penyelesaian yang sah, hanya salin data di sana dan gunakan alat yang disediakan oleh GUI untuk menyelesaikan masalah.

Tetapi...ini bukan punca masalah, malah mungkin membawa kepada beberapa kelemahan, seperti cara mengimport data ke dalam hamparan, isu kebolehskalaan, dsb.

SQL cara...

Andaikan jam tangannya kelihatan 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 jadual apa yang dia jangkakan:

company_name    EMAIL   PRINT 1 pages   PRINT 2 pages   PRINT 3 pages
-------------------------------------------------------------
CompanyA        0       0               1               3
CompanyB        1       1               2               0

baris (EMAILPRINT x pages)表示条件。主要的分组是按company_name dijalankan.

Untuk menetapkan syarat, adalah lebih sesuai untuk menggunakan pernyataan KESCASE语句。为了按某个东西进行分组,使用...GROUP BY. Untuk mengumpulkan mengikut sesuatu, gunakan...GROUP BY.

SQL asas untuk menyediakan jadual pangsi ini mungkin kelihatan 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 sepatutnya memberikan hasil yang diingini dengan cepat. Kelemahan utama pendekatan ini ialah lebih banyak baris yang anda perlukan dalam jadual pangsi, lebih banyak syarat yang perlu anda tentukan dalam pernyataan SQL.

Ini juga boleh diselesaikan, jadi orang ramai cenderung menggunakan kenyataan, rutin, kaunter, dsb.

Beberapa pautan tambahan mengenai topik ini:

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!