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
Lepaskan: 2025-01-24 06:27:11
asal
745 orang telah melayarinya

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

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

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

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!

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