PostgreSQL で現在の行と隣接する行を比較して結果を取得する
PostgreSQL で、隣接する行間の相関関係や異常を見つけるには、特定のアプローチが必要です。そのような例の 1 つは、偶数の間に挟まれた奇数を識別することです。ウィンドウ関数を活用して、このロジックを効率的に実装します。
この概念では、現在の行を基準とした指定されたオフセットから前の値と次の値をそれぞれ抽出するラグ関数とリード関数を使用します。これらの関数を使用した洗練されたソリューションは次のとおりです。
SELECT tokcat.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' = previousCategory AND 'NAME' = nextCategory AND 'NAME' <> category
このクエリでは、ウィンドウ関数 'w' がサブクエリ内で定義され、データを 'textBlockId' と 'sentence' で分割し、データを 'textBlockId' で並べ替えます。 「」「文章」「立場」。したがって、各行の「previousCategory」には前の行のカテゴリが含まれ、「nextCategory」には後続の行のカテゴリが含まれます。
現在の行のカテゴリが ' と異なるかどうかを確認して結果をフィルタリングします。 NAME」と一致しますが、「previousCategory」と「nextCategory」は両方とも「NAME」と一致します。これにより、名前カテゴリの両側にある名前以外の単語を識別できます。
または、次のようにクエリを簡略化することもできます。
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';
全体として、ウィンドウ関数を使用すると、隣接する行を比較する効率的な方法が提供されます。 PostgreSQL では、特定のシーケンス パターンや異常の識別が可能になります。
以上がウィンドウ関数を使用して PostgreSQL の隣接する行間のデータ異常を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。