Fungsi tetingkap di MySQL digunakan untuk melakukan pengiraan di seluruh set baris yang berkaitan dengan baris semasa. Ini dilakukan tanpa runtuh hasil yang ditetapkan ke dalam satu baris output seperti fungsi agregat. Sebaliknya, fungsi tetingkap mengembalikan nilai untuk setiap baris dalam set hasil asal, berdasarkan tetingkap atau bingkai baris yang ditakrifkan oleh klausa OVER
.
Berikut adalah contoh asas cara menggunakan fungsi tetingkap di MySQL:
<code class="sql">SELECT employee_id, salary, AVG(salary) OVER (PARTITION BY department_id) AS avg_salary_by_dept FROM employees;</code>
Dalam contoh ini, fungsi AVG
mengira gaji purata dalam setiap jabatan (seperti yang ditakrifkan oleh PARTITION BY
klausa). Klausa OVER
menentukan tetingkap di mana fungsi digunakan.
Komponen utama fungsi tetingkap termasuk:
ROW_NUMBER()
, RANK()
, DENSE_RANK()
, SUM()
, AVG()
, dan sebagainya).Lebih klausa : Ini adalah wajib untuk fungsi tetingkap dan mentakrifkan tetingkap di mana fungsi digunakan. Ia boleh termasuk:
PARTITION BY
: membahagikan hasil yang ditetapkan ke dalam partition yang mana fungsi digunakan.ORDER BY
: mentakrifkan urutan baris dalam partition.ROWS
atau RANGE
: Menentukan bingkai baris berbanding baris semasa.Sebagai contoh, untuk mendapatkan jumlah jualan mengikut tarikh:
<code class="sql">SELECT date, sales, SUM(sales) OVER (ORDER BY date) AS running_total FROM sales_data;</code>
Dalam kes ini, SUM
adalah fungsi tetingkap, dan OVER (ORDER BY date)
mentakrifkan tetingkap sebagai semua baris dari permulaan keputusan yang ditetapkan ke baris semasa, yang diperintahkan mengikut tarikh.
Menggunakan fungsi tetingkap di MySQL untuk analisis data memberikan beberapa faedah:
Sebagai contoh, untuk mencari tiga pekerja tertinggi tertinggi dalam setiap jabatan:
<code class="sql">SELECT department_id, employee_id, salary, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank_within_dept FROM employees WHERE rank_within_dept </code>
Ya, fungsi tetingkap berpotensi dapat meningkatkan prestasi pertanyaan di MySQL. Inilah Caranya:
Walau bagaimanapun, perlu diperhatikan bahawa kesan prestasi boleh berbeza -beza bergantung kepada kes penggunaan khusus dan pengagihan data. Dalam sesetengah senario, fungsi tetingkap mungkin tidak memberikan rangsangan prestasi yang signifikan, terutamanya jika dataset kecil atau jika operasi tetingkap adalah kompleks.
Sebagai contoh, pertimbangkan pertanyaan untuk mengira perbezaan jualan dari hari sebelumnya:
<code class="sql">SELECT date, sales, sales - LAG(sales) OVER (ORDER BY date) AS sales_difference FROM sales_data;</code>
Pertanyaan ini menggunakan fungsi LAG
untuk membandingkan jualan dengan hari sebelumnya, yang boleh menjadi lebih cekap daripada menggunakan diri sendiri.
Walaupun fungsi tetingkap berkuasa, terdapat batasan dan kes penggunaan khusus untuk dipertimbangkan ketika melaksanakannya dalam MySQL:
ROWS
atau klausa RANGE
untuk menentukan bingkai dalam klausa OVER
.Kes penggunaan khusus di mana fungsi tetingkap amat berguna termasuk:
Analisis siri masa : Mengira purata bergerak, menjalankan jumlah, atau membandingkan nilai semasa terhadap data sejarah.
<code class="sql">SELECT date, sales, AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg_3_days FROM sales_data;</code>
Pengiraan ranking dan persentil : Mengenal pasti pemain terbaik atau mengira kedudukan persentil dalam kumpulan.
<code class="sql">SELECT employee_id, salary, PERCENT_RANK() OVER (ORDER BY salary) AS percentile_rank FROM employees;</code>
Agregasi kumulatif : Mengesan jumlah atau jumlah kumulatif dari masa ke masa atau dalam partisi.
<code class="sql">SELECT product_id, date, quantity, SUM(quantity) OVER (PARTITION BY product_id ORDER BY date) AS cumulative_quantity FROM inventory;</code>
Analisis perbandingan : Membandingkan nilai terhadap purata kumpulan atau jumlah.
<code class="sql">SELECT department_id, employee_id, salary, salary - AVG(salary) OVER (PARTITION BY department_id) AS salary_vs_dept_avg FROM employees;</code>
Ringkasnya, sementara fungsi tetingkap di MySQL menawarkan keupayaan analisis yang kuat, sangat penting untuk memahami batasan mereka dan mengoptimumkan penggunaannya mengikut kes penggunaan tertentu dan ciri -ciri data.
Atas ialah kandungan terperinci Bagaimana anda menggunakan fungsi tetingkap di mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!