Fungsi agregat dalam MySQL digunakan untuk melakukan pengiraan pada satu set nilai dan mengembalikan satu nilai. Inilah cara menggunakan fungsi agregat yang paling biasa:
Kiraan () : Fungsi ini mengembalikan bilangan baris yang sepadan dengan keadaan yang ditentukan. Ia boleh mengira semua baris atau hanya baris di mana ungkapan tidak batal.
<code class="sql">SELECT COUNT(*) FROM employees; SELECT COUNT(employee_id) FROM employees WHERE department = 'IT';</code>
SUM () : Fungsi ini mengira jumlah jumlah lajur angka. Ia mengabaikan nilai null.
<code class="sql">SELECT SUM(salary) FROM employees WHERE department = 'Sales';</code>
AVG () : Fungsi ini mengira purata lajur angka. Ia juga mengabaikan nilai null.
<code class="sql">SELECT AVG(salary) FROM employees WHERE department = 'Marketing';</code>
Min () : Fungsi ini mengembalikan nilai terkecil dalam lajur yang ditentukan.
<code class="sql">SELECT MIN(salary) FROM employees;</code>
Max () : Fungsi ini mengembalikan nilai terbesar dalam lajur yang ditentukan.
<code class="sql">SELECT MAX(salary) FROM employees;</code>
Klausa GROUP BY
digunakan bersempena dengan fungsi agregat kepada baris kumpulan yang mempunyai nilai yang sama dalam lajur tertentu ke dalam baris ringkasan. Inilah cara anda boleh menggunakannya:
<code class="sql">SELECT department, COUNT(*) as employee_count, AVG(salary) as avg_salary FROM employees GROUP BY department;</code>
Dalam contoh ini, baris dalam jadual employees
dikelompokkan oleh lajur department
. Fungsi COUNT(*)
mengira bilangan pekerja di setiap jabatan, dan AVG(salary)
mengira gaji purata dalam setiap jabatan.
Mata Utama untuk Diingati:
GROUP BY
klausa.GROUP BY
biasanya digunakan apabila anda ingin menggunakan fungsi agregat untuk dikumpulkan data.Semasa bekerja dengan fungsi agregat di MySQL, penting untuk mengelakkan kesilapan biasa berikut:
Lupa untuk menggunakan kumpulan oleh : Jika anda memasukkan lajur yang tidak diagihkan dalam pernyataan pilih anda bersama-sama dengan fungsi agregat, anda perlu menggunakan GROUP BY
untuk lajur tersebut. Gagal berbuat demikian akan mengakibatkan kesilapan.
<code class="sql">-- Incorrect SELECT department, COUNT(*) FROM employees; -- Correct SELECT department, COUNT(*) FROM employees GROUP BY department;</code>
GROUP BY
untuk mengelakkan kesilapan atau hasil yang tidak dijangka.SUM
dan AVG
mengabaikan nilai NULL
. Jika nilai NULL
adalah penting, anda mungkin perlu mengendalikannya secara berasingan.SUM
dan AVG
dimaksudkan untuk data angka. Menggunakannya pada jenis data bukan angka (contohnya, rentetan) akan mengakibatkan kesilapan atau keputusan yang tidak dijangka.COUNT(col_name)
mengira nilai bukan null dalam lajur yang ditentukan, sedangkan COUNT(*)
mengira semua baris, termasuk mereka yang mempunyai nilai null dalam lajur lain.Mengoptimumkan pertanyaan dengan fungsi agregat dapat meningkatkan prestasi dengan ketara. Berikut adalah beberapa strategi:
Gunakan indeks : Pastikan lajur yang terlibat dalam WHERE
, GROUP BY
, dan ORDER BY
klausa diindeks. Ini boleh mempercepatkan proses pengagregatan.
<code class="sql">CREATE INDEX idx_department ON employees(department);</code>
Elakkan menggunakan pilih * : Daripada menggunakan SELECT *
, tentukan hanya lajur yang anda perlukan. Ini mengurangkan jumlah data yang perlu diproses.
<code class="sql">-- Instead of SELECT * FROM employees GROUP BY department; -- Use SELECT department, COUNT(*) FROM employees GROUP BY department;</code>
Gunakan di mana sebelum kumpulan oleh : menapis seberapa banyak baris yang mungkin menggunakan WHERE
sebelum memohon GROUP BY
. Ini mengurangkan bilangan baris yang perlu dikelompokkan.
<code class="sql">SELECT department, COUNT(*) FROM employees WHERE salary > 50000 GROUP BY department;</code>
Pertimbangkan menggunakan subqueries atau jadual yang diperolehi : dalam beberapa kes, menggunakan subquery untuk pra-agregat data sebelum menggunakan agregasi akhir dapat meningkatkan prestasi.
<code class="sql">SELECT d.department, SUM(e.total_salary) as total_department_salary FROM ( SELECT department, SUM(salary) as total_salary FROM employees GROUP BY employee_id, department ) e JOIN departments d ON e.department = d.department GROUP BY d.department;</code>
Gunakan Jelaskan : Gunakan pernyataan EXPLAIN
untuk menganalisis pelan pelaksanaan pertanyaan anda. Ini dapat membantu anda mengenal pasti kemungkinan kesesakan dan mengoptimumkan dengan sewajarnya.
<code class="sql">EXPLAIN SELECT department, COUNT(*) FROM employees GROUP BY department;</code>
Dengan menggunakan teknik pengoptimuman ini, anda dapat meningkatkan prestasi pertanyaan yang menggunakan fungsi agregat di MySQL.
Atas ialah kandungan terperinci Bagaimanakah anda menggunakan fungsi agregat dalam MySQL (mis., Kira, SUM, AVG, MIN, MAX)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!