Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menjana output jadual pangsi dalam MySQL?

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粉180844619P粉180844619424 hari yang lalu428

membalas semua(2)saya akan balas

  • P粉696891871

    P粉6968918712023-08-23 00:33:40

    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

    balas
    0
  • P粉608647033

    P粉6086470332023-08-23 00:17:57

    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:

    balas
    0
  • Batalbalas