Comparaison de lignes avec des fonctions de fenêtre dans PostgreSQL
Dans PostgreSQL, les fonctions de fenêtre fournissent un outil puissant pour comparer la ligne actuelle avec les lignes adjacentes, soit le précédent ou le suivant. Pour récupérer des résultats basés sur des comparaisons avec les lignes voisines, des fonctions de fenêtre telles que lag() et lead() peuvent être utilisées efficacement.
Exemple : Trouver des nombres impairs entre pairs
Considérons un tableau avec deux colonnes : position et random_number. Pour récupérer des nombres impairs pris en sandwich entre des nombres pairs, nous pouvons utiliser les fonctions Window comme suit :
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;
Utilisation du monde réel : identification des mots contextuels
De même, pour l'analyse de mots où le but est de trouver des mots n'appartenant pas à une catégorie spécifique (par exemple, NOM) mais entourés de mots qui en font partie, la même approche peut être appliqué :
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';
Avantages majeurs des fonctions de fenêtre
L'utilisation des fonctions de fenêtre pour comparer dynamiquement les lignes offre plusieurs avantages :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!