Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyoal Secara Cekap untuk Berbilang Kiraan dalam Pernyataan SQL Tunggal?

Bagaimana untuk Menyoal Secara Cekap untuk Berbilang Kiraan dalam Pernyataan SQL Tunggal?

DDD
Lepaskan: 2025-01-20 16:23:09
asal
658 orang telah melayarinya

How to Efficiently Query for Multiple Counts in a Single SQL Statement?

Bertanya berbilang kiraan dengan cekap dalam satu pernyataan SQL

Dalam pengaturcaraan pangkalan data, selalunya penting untuk mendapatkan semula data agregat seperti kiraan, purata dan jumlah. Apabila berbilang jenis kiraan diperlukan untuk satu pertanyaan, ini boleh dicapai menggunakan gabungan pengagregatan dan pengelompokan bersyarat.

Masalah: Berbilang kiraan dalam satu pertanyaan

Pertimbangkan pertanyaan berikut:

<code class="language-sql">SELECT distributor_id,
COUNT(*) AS TOTAL,
COUNT(*) WHERE level = 'exec',
COUNT(*) WHERE level = 'personal'</code>
Salin selepas log masuk

Pertanyaan ini direka untuk mengembalikan maklumat berikut untuk setiap pengedar:

  • Jumlah bilangan rekod
  • Bilangan rekod dengan tahap “exec”
  • Bilangan rekod dengan tahap "peribadi"

Walau bagaimanapun, pertanyaan ini akan menghasilkan berbilang baris hasil, dengan setiap kumpulan mengira satu baris. Untuk mengelakkan ini, kita perlu menstrukturkan pertanyaan dengan cara yang mengembalikan satu baris untuk semua kiraan yang diperlukan.

Penyelesaian: Pengagregatan dan pengelompokan bersyarat

Untuk menyelesaikan masalah ini, kita boleh menggunakan pernyataan CASE dalam kombinasi dengan fungsi agregat (seperti COUNT). Pernyataan CASE membolehkan kami menilai secara bersyarat sesuatu ungkapan dan mengembalikan nilai yang sepadan. Ini membolehkan kami mengira rekod berdasarkan kriteria tertentu dalam satu pertanyaan.

Pertanyaan yang diubah suai berikut mengandungi pernyataan KES:

<code class="language-sql">SELECT distributor_id,
    count(*) AS total,
    sum(case when level = 'exec' then 1 else 0 end) AS ExecCount,
    sum(case when level = 'personal' then 1 else 0 end) AS PersonalCount
FROM yourtable
GROUP BY distributor_id</code>
Salin selepas log masuk

Dengan menggunakan pernyataan CASE, kami boleh menggunakan syarat pada pengagregatan. Klausa WHEN menentukan syarat, manakala klausa THEN dan ELSE mentakrifkan nilai yang sepadan untuk dikira. Fungsi SUM menambah nilai yang dikembalikan oleh setiap pernyataan bersyarat.

Kelebihan dan Nota:

Pendekatan ini mempunyai beberapa kelebihan:

  • Ia memudahkan pertanyaan dengan menggabungkan berbilang kiraan ke dalam set hasil tunggal.
  • Ia memastikan bahawa satu baris keputusan dikembalikan untuk setiap pengedar.
  • Ia disokong oleh kebanyakan sistem pengurusan pangkalan data hubungan (RDBMS).

Walau bagaimanapun, adalah penting untuk mempertimbangkan kesan prestasi apabila menggunakan pengagregatan bersyarat untuk memproses set data yang besar. Dalam kes ini, anda mungkin perlu menggunakan indeks atau teknik lain untuk mengoptimumkan pertanyaan.

Atas ialah kandungan terperinci Bagaimana untuk Menyoal Secara Cekap untuk Berbilang Kiraan dalam Pernyataan SQL Tunggal?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan