Oracle の KEEP ありとなしの PARTITION BY
Oracle の PARTITION BY 句を使用すると、ユーザーは指定された列に基づいてテーブル内の行をグループ化できます。集計計算用。場合によっては、KEEP 句を PARTITION BY と組み合わせて使用して、各パーティション内の個々の行の保持を制御できます。
KEEP を使用した構文:
MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)
この構文では、KEEP 句の後に DENSE_RANK FIRST が続き、給与が最も低い行を次の行にする必要があることを示しています。各パーティション内に保持されます。 DENSE_RANK は連続的なランキングを保証します。つまり、同じ給与を持つ行は同じランクになります。
KEEP を使用しない構文:
MIN(sal) OVER (PARTITION BY deptno)
この構文では、KEEP 句が省略されています。 。 KEEP を使用しない場合、各パーティション内のすべての行が集計計算の対象となるため、同じ値を持つ複数の行が結果に含まれる可能性があります。
相違点:
2 つのクエリの主な違いは次のとおりです。
冗長KEEP:
この例では、MIN 関数も同じ列 (sal) に適用されるため、KEEP 句は冗長です。その結果、給与に基づいて最初にランク付けされた行は、常に給与が最も低い行になります。
順序列が異なる例:
ただし、順序が異なる場合は、順序付け列は KEEP 句に使用され、別の効果をもたらす可能性があります:
MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY name) OVER (PARTITION BY deptno)
この場合、次の行のうち給与が最も低い行です。同じ順序 (名前) を持つものは各パーティション内に保持されます。これにより、ユーザーは各部門内の特定の名前の従業員の最低給与を選択できます。
以上が「KEEP」句はOracleの「PARTITION BY」集計関数にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。