Artikel ini menerangkan fungsi tetingkap SQL, alat yang berkuasa untuk analisis data lanjutan. Ia memperincikan sintaks mereka, termasuk partition oleh dan perintah oleh klausa, dan mempamerkan penggunaannya dalam menjalankan jumlah, ranking, ketinggalan/terkemuka, dan bergerak purata.
Fungsi tetingkap, juga dikenali sebagai fungsi analitik, adalah alat yang berkuasa dalam SQL yang membolehkan anda melakukan pengiraan merentasi satu set baris jadual yang entah bagaimana berkaitan dengan baris semasa. Tidak seperti fungsi agregat (seperti SUM, AVG, Count) yang kumpulan kumpulan dan mengembalikan nilai tunggal untuk setiap kumpulan, fungsi tetingkap beroperasi pada satu set baris ("tetingkap") tanpa mengumpulkannya. Ini bermakna anda mengekalkan semua baris asal dalam set keputusan anda, tetapi dengan lajur yang dikira ditambah berdasarkan tetingkap.
Sintaks asas melibatkan menentukan klausa OVER
selepas fungsi. Klausa ini mentakrifkan tingkap. Komponen utama dalam klausa OVER
adalah:
RANK
, ROW_NUMBER
, dan LAG/LEAD
yang sensitif terhadap perintah baris.ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
termasuk baris semasa, baris terdahulu, dan baris berikut. RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
termasuk semua baris dari permulaan partition sehingga baris semasa.Sebagai contoh, untuk mengira jumlah jualan yang berjalan:
<code class="sql">SELECT order_date, sales, SUM(sales) OVER (ORDER BY order_date) as running_total FROM sales_table;</code>
Pertanyaan ini mengira jumlah jualan kumulatif sehingga setiap tarikh pesanan. ORDER BY
klausa adalah penting di sini. Tanpa itu, jumlah yang berjalan akan tidak dapat diramalkan.
Fungsi tetingkap adalah sangat serba boleh dan mempunyai banyak aplikasi dalam analisis data. Beberapa kes penggunaan biasa termasuk:
RANK()
, ROW_NUMBER()
, DENSE_RANK()
, dan NTILE()
digunakan di sini.LAG()
dan LEAD()
digunakan.Fungsi tetingkap sering mengatasi pertanyaan SQL tradisional yang mencapai hasil yang sama menggunakan join sendiri atau subqueries. Ini kerana:
Walau bagaimanapun, penting untuk diperhatikan bahawa keuntungan prestasi bergantung kepada beberapa faktor, termasuk saiz dataset, kerumitan pertanyaan, dan sistem pangkalan data tertentu yang digunakan. Dalam sesetengah kes, pertanyaan tradisional yang dioptimumkan dengan baik mungkin masih mengatasi pertanyaan fungsi tetingkap.
Pertimbangkan senario ini di mana fungsi tetingkap memudahkan pertanyaan kompleks:
Senario 1: Mencari 3 produk teratas setiap kategori berdasarkan jualan.
Tanpa fungsi tingkap, ini memerlukan diri sendiri atau subquery untuk setiap kategori. Dengan fungsi tetingkap:
<code class="sql">WITH RankedSales AS ( SELECT product_name, category, sales, RANK() OVER (PARTITION BY category ORDER BY sales DESC) as sales_rank FROM products ) SELECT product_name, category, sales FROM RankedSales WHERE sales_rank </code>
Senario 2: Mengira perubahan peratusan jualan berbanding bulan sebelumnya.
Menggunakan LAG()
dengan ketara memudahkan ini:
<code class="sql">SELECT order_date, sales, (sales - LAG(sales, 1, 0) OVER (ORDER BY order_date)) * 100.0 / LAG(sales, 1, 1) OVER (ORDER BY order_date) as percentage_change FROM sales_table;</code>
Contoh -contoh ini menggambarkan bagaimana fungsi tetingkap secara drastik dapat mengurangkan kerumitan dan meningkatkan kebolehbacaan dan prestasi pertanyaan SQL yang kompleks. Mereka adalah alat yang berkuasa untuk analisis data lanjutan dan harus menjadi bahagian penting dari mana -mana toolkit pemaju SQL.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan fungsi tetingkap dalam SQL untuk analisis data lanjutan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!