在PostgreSQL 中使用視窗函數比較行
在PostgreSQL 中,視窗函數提供了一個強大的工具來比較當前行與相鄰行,上一張或下一張。要根據與相鄰行的比較來檢索結果,可以有效地使用 lag() 和 Lead() 等視窗函數。
範例:找出偶數之間的奇數
考慮一個具有兩列的表:位置和隨機數。要擷取夾在偶數之間的奇數,我們可以使用視窗函數,如下所示:
SELECT random_number FROM ( SELECT random_number, lag(random_number, 1) OVER w AS previous_number, lead(random_number, 1) OVER w AS next_number FROM table_name WINDOW w AS (PARTITION BY position ORDER BY position) ) subquery WHERE random_number % 2 = 1 AND previous_number % 2 = 0 AND next_number % 2 = 0;
真實世界用法:辨識上下文單字
類似地,對於單字分析,其目標是找到不屬於特定類別(例如,NAME)但被屬於特定類別的單字包圍的單字,相同的方法可以應用:
SELECT text FROM ( SELECT text, category, lag(category, 1) OVER w AS previous_category, lead(category, 1) OVER w AS next_category FROM token JOIN text_block_has_token ON token_id = id WINDOW w AS (PARTITION BY text_block_id, sentence ORDER BY position) ) subquery WHERE category <> 'NAME' AND previous_category = 'NAME' AND next_category = 'NAME';
視窗函數的主要優點
使用視窗函數動態比較行有幾個優點:
以上是PostgreSQL 視窗函數如何比較資料列以識別相鄰資料中的模式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!