Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengira Kejadian Data dengan Cekap dalam SQL dengan Pelbagai Syarat?

Bagaimanakah Saya Boleh Mengira Kejadian Data dengan Cekap dalam SQL dengan Pelbagai Syarat?

Susan Sarandon
Susan Sarandonasal
2025-01-24 06:27:11789semak imbas

How Can I Efficiently Count Data Occurrences in SQL with Multiple Conditions?

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 FILTERagregasi. 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!

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