Bagaimana untuk mengembalikan output jadual pangsi dalam MySQL?
P粉578343994
P粉578343994 2023-07-25 13:59:22
0
2
458
<p>Jika saya mempunyai jadual MySQL seperti ini:</p> <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> <p>Bolehkah anda menjalankan pertanyaan MySQL untuk mendapatkan output berikut:</p> <pra>nama_syarikat CETAK EMEL 1 halaman CETAK 2 halaman CETAK 3 halaman ------------------------------------------------- ---------- SyarikatA 0 0 1 3 SyarikatB 1 1 2 0 </pra> <p>Ideanya ialah kiraan halaman boleh berbeza-beza, jadi bilangan lajur dalam output harus mencerminkan ini, dengan satu lajur untuk setiap tindakan/kiraan halaman, dan kemudian mengira bilangan klik untuk setiap nama syarikat. Saya tidak pasti sama ada ini dipanggil jadual pangsi, tetapi seseorang telah mencadangkan untuk melakukan ini. </p>
P粉578343994
P粉578343994

membalas semua(2)
P粉461599845

Penyelesaian saya ialah menggunakan T-SQL dan bukannya sebarang jadual pangsi:

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粉574268989

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 menyesuaikannya dengan keperluan anda sendiri.

KEMASKINI

Memandangkan pautan di atas tidak lagi tersedia pada masa ini, saya merasakan perlu untuk memberikan beberapa maklumat tambahan untuk sesiapa yang mencari jawapan kepada Jadual Pangsi MySQL di sini. Pautan ini benar-benar mempunyai banyak maklumat, saya tidak akan menyalin semuanya (dan saya tidak mahu menyalin kekayaan pengetahuan mereka), tetapi saya akan memberi nasihat tentang cara bekerja dengan jadual pangsi dalam SQL, dengan peku Ambil soalan yang dikemukakan sebagai contoh.

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

Cara hamparan...

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

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

SQL way...

Andaikan jadualnya 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 jangkaan:

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

Line (EMAIL, print x pages) adalah seperti syarat. Kumpulan utama adalah mengikut nama syarikat.

Untuk menetapkan syarat, lebih sesuai menggunakan CASE statement. Untuk mengumpulkan mengikut sesuatu, anda boleh menggunakan GROUP BY.

Pernyataan 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 mahu ada dalam jadual pangsi, lebih banyak syarat yang perlu anda tentukan dalam pernyataan SQL.

Masalah ini juga boleh diselesaikan, jadi orang cenderung menggunakan kenyataan, rutin, kaunter, dll.

Berikut ialah 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!