Membandingkan Baris dalam PostgreSQL: Memanfaatkan Fungsi Tetingkap
Dalam PostgreSQL, mendapatkan semula hasil pertanyaan yang melibatkan perbandingan dengan baris bersebelahan memerlukan penyelesaian yang disesuaikan. Di sini kita meneroka cara untuk mendekati tugas ini dengan berkesan:
Perbandingan Antara Nombor Ganjil dan Jiran Genap
Untuk mengekstrak nombor ganjil yang diapit antara nombor genap, penyelesaian tersuai boleh dibuat menggunakan subkueri kompleks. Walau bagaimanapun, fungsi tetingkap PostgreSQL menawarkan pendekatan yang lebih cekap. Fungsi lag() dan lead() boleh digunakan untuk mendapatkan semula nilai daripada baris sebelumnya dan seterusnya, masing-masing, membolehkan perbandingan mudah dalam partition tetingkap yang ditakrifkan oleh textBlockId dan ayat.
Kes Penggunaan Lanjutan
Dalam senario lanjutan yang melibatkan pengkategorian, teknik ini boleh digunakan untuk cari perkataan yang muncul di antara kejadian kategori tertentu, NAME, sambil mengecualikan perkataan kategori tersebut.
Pelaksanaan Menggunakan Fungsi Tetingkap
Coretan kod berikut menunjukkan penggunaan tetingkap berfungsi untuk menangani masalah:
SELECT textcat.text FROM ( SELECT text, category, chartype, lag(category,1) OVER w as previousCategory, lead(category,1) OVER w as nextCategory FROM token t, textBlockHasToken tb WHERE tb.tokenId = t.id WINDOW w AS ( PARTITION BY textBlockId, sentence ORDER BY textBlockId, sentence, position ) ) tokcat WHERE 'NAME' = ANY(previousCategory) AND 'NAME' = ANY(nextCategory) AND 'NAME' <> ANY(category)
Sebagai alternatif, versi ringkas pertanyaan:
SELECT text FROM ( SELECT text ,category ,lag(category) OVER w as previous_cat ,lead(category) OVER w as next_cat FROM token t JOIN textblockhastoken tb ON tb.tokenid = t.id WINDOW w AS (PARTITION BY textblockid, sentence ORDER BY position) ) tokcat WHERE category <> 'NAME' AND previous_cat = 'NAME' AND next_cat = 'NAME';
Faedah Fungsi Tetingkap
Fungsi tetingkap memberikan beberapa kelebihan:
Atas ialah kandungan terperinci Bagaimanakah Fungsi Tetingkap PostgreSQL Dapat Membandingkan Baris Bersebelahan dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!