Rumah >pangkalan data >tutorial mysql >Bagaimana Mengira Kejadian dalam Data Berkumpulan Secara Optimum Menggunakan PostgreSQL?

Bagaimana Mengira Kejadian dalam Data Berkumpulan Secara Optimum Menggunakan PostgreSQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-24 06:14:16632semak imbas

How to Optimally Count Occurrences in Grouped Data Using PostgreSQL?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn