Mengira bilangan kejadian dalam data terkumpul PostgreSQL dengan cekap
PostgreSQL menyediakan pelbagai kaedah untuk mengira kejadian data dalam jadual berkumpulan. Contohnya, anda boleh menggunakan pernyataan CASE WHEN untuk mengira nilai tertentu:
<code class="language-sql">SELECT sum(CASE WHEN question1 = 0 THEN 1 ELSE 0 END) AS ZERO, sum(CASE WHEN question1 = 1 THEN 1 ELSE 0 END) AS ONE, sum(CASE WHEN question1 = 2 THEN 1 ELSE 0 END) AS TWO, category FROM reviews GROUP BY category</code>
Namun, apabila bilangan nilai yang mungkin meningkat, menggunakan pernyataan CASE WHEN menjadi semakin rumit. Dalam PostgreSQL 9.4 dan lebih baru, pilihan FILTER agregat menyediakan penyelesaian yang lebih bersih dan berpotensi lebih pantas:
<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>
Untuk ringkasnya, sintaks yang dipermudahkan 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 senarai pilihan yang besar, fungsi crosstab()
menyediakan alternatif yang lebih berprestasi:
<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>
Ringkasnya, PostgreSQL menyediakan berbilang kaedah untuk pengiraan SQL bersyarat. Pilihan FILTER menyediakan penyelesaian yang ringkas dan cekap, manakala fungsi crosstab()
memberikan prestasi terbaik untuk mengendalikan sejumlah besar pilihan.
Atas ialah kandungan terperinci Bagaimana Mengira Kejadian dalam Data Berkumpulan Secara Optimum Menggunakan PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!