


Bagaimana untuk Mengumpul Berbilang Kiraan dengan Cekap daripada Lajur Berbeza dalam Jadual MySQL yang Sama?
MySQL: Mengagregatkan Kiraan Merentasi Berbilang Lajur dengan Cekap dalam Satu Jadual
Berbilang pertanyaan menyasarkan jadual yang sama tetapi lajur yang berbeza dalam MySQL boleh membawa kepada pengambilan data yang tidak cekap dan hasil yang tidak tepat. Mari kita ilustrasikan ini dengan contoh dan tunjukkan pendekatan yang betul.
Andaikan anda perlu mengira kiraan berdasarkan pelbagai kriteria dalam jadual t_hospital
:
Kaedah Tidak Cekap (Berbilang Pertanyaan):
Kod berikut cuba mencapai ini menggunakan berbilang pertanyaan, tetapi ia menghasilkan hasil yang salah untuk lajur melebihi yang pertama:
SET @start_res = 20150301; SET @finish_res= 20150501; SET @finish_check= 20150801; SET @start_check= 20150301; SET @daily_hos= 3; SELECT* from ( SELECT COUNT(DAY_IN) AS arr FROM t_hospital WHERE DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )e, (SELECT COUNT(PAT_STATUS) AS ONG1 FROM t_hospital WHERE PAT_STATUS like '%ong%' and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN ) a, (SELECT COUNT(PAT_STATUS) AS RTED FROM t_hospital WHERE PAT_STATUS like '%rtde%'and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )b, (SELECT COUNT(PAT_STATUS) AS POLI FROM t_hospital WHERE PAT_STATUS like '%pol%'and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )c, (SELECT COUNT(PAT_STATUS) AS para FROM t_hospital WHERE PAT_STATUS like '%para%' and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos group by DAY_IN )d;
Kaedah Cekap (Pertanyaan Tunggal dengan Pengagregatan Bersyarat):
Penyelesaian optimum melibatkan satu pertanyaan yang menggunakan pengagregatan bersyarat:
SELECT DAY_IN, COUNT(*) AS arr, SUM(IF(PAT_STATUS like '%ong%', 1, 0)) AS ONG1, SUM(IF(PAT_STATUS like '%rtde%', 1, 0)) AS RTED, SUM(IF(PAT_STATUS like '%pol%', 1, 0)) AS POL1, SUM(IF(PAT_STATUS like '%para%', 1, 0)) AS para FROM t_hospital WHERE DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res and ID_daily_hos =@daily_hos GROUP BY DAY_IN;
Pendekatan ini menggunakan fungsi IF()
untuk mengira kejadian secara bersyarat berdasarkan nilai PAT_STATUS
dan SUM()
mengagregatkan kiraan ini untuk setiap DAY_IN
. Kaedah ini jauh lebih cekap dan memberikan hasil yang tepat. Ia mengelakkan produk Cartesian yang dicipta secara tersirat dengan menyertai berbilang subkueri.
Atas ialah kandungan terperinci Bagaimana untuk Mengumpul Berbilang Kiraan dengan Cekap daripada Lajur Berbeza dalam Jadual MySQL yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)?

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL?
