Kaedah pengiraan keadaan SQL yang cekap
Dalam SQL, terdapat banyak cara untuk mengumpulkan dan mengira kejadian data mengikut lajur tertentu. Dalam PostgreSQL, cara yang paling mudah ialah menggunakan ungkapan CASE, seperti yang ditunjukkan dalam contoh pertanyaan. Walau bagaimanapun, pendekatan ini boleh menjadi rumit apabila berurusan dengan sejumlah besar nilai yang mungkin.
PostgreSQL 9.4 dan lebih baru menyediakan kaedah yang lebih optimum dan fleksibel: pilihan FILTER
agregasi. Klausa FILTER
membenarkan anda menggunakan syarat tambahan pada fungsi agregat, mengira hanya nilai tertentu yang sepadan dengan syarat tertentu.
<code class="language-sql">SELECT category , count(*) FILTER (WHERE question1 = 0) AS zero , count(*) FILTER (WHERE question1 = 1) AS one , count(*) FILTER (WHERE question1 = 2) AS two FROM reviews GROUP BY 1;</code>
Pertanyaan ini secara berkesan mengira kejadian sifar, satu dan dua dalam lajur soalan1, dikumpulkan mengikut lajur kategori.
Untuk pengoptimuman lanjut, versi pendek berikut boleh digunakan:
<code class="language-sql">SELECT category , count(question1 = 0 OR NULL) AS zero , count(question1 = 1 OR NULL) AS one , count(question1 = 2 OR NULL) AS two FROM reviews GROUP BY 1;</code>
Untuk senario kompleks yang melibatkan berbilang keadaan atau sejumlah besar pilihan, fungsi crosstab()
memberikan prestasi dan kesederhanaan yang sangat baik:
<code class="language-sql">SELECT * FROM crosstab( 'SELECT category, question1, count(*) AS ct FROM reviews GROUP BY 1, 2 ORDER BY 1, 2' , 'VALUES (0), (1), (2)' ) AS ct (category text, zero int, one int, two int);</code>
Pertanyaan crosstab
ini menghasilkan set hasil yang mengandungi semua kiraan yang diperlukan, dibentangkan sebagai lajur bernama untuk akses dan analisis yang mudah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Kejadian Data dengan Cekap dalam SQL dengan Pelbagai Syarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!