Jika saya memiliki tabel MySQL yang terlihat seperti ini:
company_name action pagecount ------------------------------- Perusahaan A PRINT 3 Perusahaan A PRINT 2 Perusahaan A PRINT 3 Perusahaan B EMAIL Perusahaan B PRINT 2 Perusahaan B PRINT 2 Perusahaan B PRINT 1 Perusahaan A PRINT 3
Apakah mungkin menjalankan query MySQL untuk mendapatkan output seperti ini:
company_name EMAIL PRINT 1 halaman PRINT 2 halaman PRINT 3 halaman -------------------------------------------------- ----------- PerusahaanA 0 0 1 3 Perusahaan B 1 1 2 0
Idenya adalah bahwa pagecount
dapat bervariasi sehingga jumlah kolom output harus mencerminkan itu, satu kolom untuk masing-masing action
/ pagecount
pasangan dan kemudian jumlah klik per company_name
. Saya tidak yakin apakah ini disebut tabel pivot tetapi seseorang menyarankan itu?
Jawaban:
Ini pada dasarnya adalah tabel pivot.
Sebuah tutorial yang bagus tentang cara mencapai ini dapat ditemukan di sini: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Saya menyarankan membaca posting ini dan menyesuaikan solusi ini dengan kebutuhan Anda.
Memperbarui
Setelah tautan 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 meletakkan semuanya dari sana di sini (bahkan lebih karena saya hanya tidak ingin menyalin pengetahuan mereka yang luas), tetapi saya akan memberikan saran tentang cara menangani pivot tabel cara sql umumnya dengan contoh dari peku yang mengajukan pertanyaan di tempat pertama.
Mungkin tautannya 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 menyebabkan beberapa kerugian, seperti bagaimana memasukkan data ke dalam spreadsheet, penskalaan yang bermasalah, dan sebagainya.
Cara SQL ...
Mengingat mejanya terlihat seperti ini:
Sekarang lihat ke meja yang diinginkan:
Baris (
EMAIL
,PRINT x pages
) menyerupai kondisi. Pengelompokan utama adalah dengancompany_name
.Untuk mengatur kondisi ini lebih baik berteriak untuk menggunakan
CASE
pernyataan. Untuk kelompok oleh sesuatu, baik, penggunaan ...GROUP BY
.SQL dasar yang menyediakan pivot ini dapat terlihat seperti ini:
Ini harus memberikan hasil yang diinginkan dengan sangat cepat. Kelemahan utama untuk pendekatan ini, semakin banyak baris yang Anda inginkan dalam tabel pivot Anda, semakin banyak kondisi yang perlu Anda tetapkan dalam pernyataan SQL Anda.
Ini dapat diatasi juga, oleh karena itu orang cenderung menggunakan pernyataan, rutinitas, penghitung dan semacamnya.
Beberapa tautan tambahan tentang topik ini:
sumber
Solusi saya adalah dalam T-SQL tanpa pivot:
sumber
SUM()
hanya dapat bekerja dengan data numerik jika Anda ingin string pivot yang harus Anda gunakanMAX()
SUM(CASE WHEN (action='PRINT' AND pagecount=1) THEN 1 ELSE 0 END)
, Anda hanya dapat melakukannyaSUM(action='PRINT' AND pagecount=1)
karena kondisinya akan dikonversi menjadi1
ketika benar dan0
ketika salahUntuk MySQL Anda dapat langsung memasukkan kondisi dalam
SUM()
fungsi dan itu akan dievaluasi sebagai Boolean0
atau1
dan karenanya Anda dapat menghitung berdasarkan kriteria Anda tanpa menggunakanIF/CASE
pernyataanDEMO
sumber
crosstab()
.Untuk pivot dinamis, gunakan
GROUP_CONCAT
denganCONCAT
. Fungsi GROUP_CONCAT menggabungkan string dari grup menjadi satu string dengan berbagai opsi.DEMO DI SINI
sumber
Versi stardard-SQL menggunakan logika boolean :
SQL Fiddle.
Bagaimana?
TRUE OR NULL
hasil panenTRUE
.FALSE OR NULL
hasil panenNULL
.NULL OR NULL
hasil panenNULL
.Dan
COUNT
hanya menghitung nilai yang bukan nol. Voila.sumber
Jawaban yang benar adalah:
sumber
other_value
tabelnya?SET
permintaan untuk meningkatkan nilai defualt yang terbatas pada 1024 untuk GROUP_CONCAT setelah 1024 GROUP_CONCAT hanya memotong string tanpa kesalahan yang berarti hasil yang tidak terduga dapat terjadi ..Ada alat yang disebut generator tabel MySQL Pivot, ini dapat membantu Anda membuat tabel pivot berbasis web yang nantinya dapat Anda ekspor ke excel (jika diinginkan). ini bisa berfungsi jika data Anda berada dalam satu tabel atau dalam beberapa tabel.
Yang perlu Anda lakukan adalah menentukan sumber data kolom (mendukung kolom dinamis), baris, nilai-nilai di tubuh tabel dan hubungan tabel (jika ada)
Halaman muka alat ini adalah http://mysqlpivottable.net
sumber
sumber