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
Lepaskan: 2025-01-24 06:14:16
asal
574 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan