Maison >base de données >tutoriel mysql >Comment les fonctions de fenêtre PostgreSQL peuvent-elles comparer efficacement les lignes adjacentes ?
Comparaison de lignes dans PostgreSQL : exploiter les fonctions de fenêtre
Dans PostgreSQL, la récupération des résultats de requête impliquant des comparaisons avec des lignes adjacentes nécessite des solutions sur mesure. Nous explorons ici comment aborder cette tâche efficacement :
Comparaison entre les nombres impairs et les voisins pairs
Pour extraire les nombres impairs pris en sandwich entre les nombres pairs, une solution personnalisée peut être conçue en utilisant des sous-requêtes complexes. Cependant, les fonctions de fenêtre de PostgreSQL offrent une approche plus efficace. Les fonctions lag() et lead() peuvent être utilisées pour récupérer les valeurs des lignes précédentes et suivantes, respectivement, permettant des comparaisons simples dans les partitions de fenêtre définies par textBlockId et sentence.
Cas d'utilisation étendu
Dans un scénario étendu impliquant la catégorisation, cette technique peut être utilisée pour localiser les mots qui apparaissent entre les instances d'une catégorie spécifique, NOM, tout en excluant les mots de cette catégorie. catégorie.
Implémentation à l'aide des fonctions de fenêtre
L'extrait de code suivant illustre l'utilisation des fonctions de fenêtre pour résoudre le problème :
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)
Alternativement, une version simplifiée de la requête :
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';
Avantages de Window Fonctions
Les fonctions de fenêtre offrent 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!