ホームページ >データベース >mysql チュートリアル >「KEEP」句はOracle集計クエリの「PARTITION BY」にどのような影響を与えますか?
Oracle での KEEP ありとなしの PARTITION BY
Oracle では、PARTITION BY 句を使用して、目的に応じてデータを個別のグループに分割できます。集計関数の適用について説明します。多くの場合、パフォーマンスの最適化や論理グループ化のためにデータをパーティション化すると有益です。
PARTITION BY 句は、KEEP キーワードの有無にかかわらず使用できます。 KEEP が使用されない場合、パーティション全体が集約に使用されます。一方、KEEP を使用すると、特定の条件を満たす行のみが集計用に保持されます。
違いを説明するために、次の 2 つのクエリを考えてみましょう。
KEEP を使用しないクエリ 1 :
SELECT deptno, MIN(sal) OVER (PARTITION BY deptno) AS "Lowest", MAX(sal) OVER (PARTITION BY deptno) AS "Highest" FROM empl
クエリ 2 KEEP:
SELECT deptno, MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "Lowest", MAX(sal) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS "Highest" FROM empl
クエリ 2 は、KEEP 句を利用して、各部門の最初と最後にランク付けされた給与のみを返します (DENSE_RANK 関数を使用)。全体的な効果は、重複する値を排除し、明確な最低給与と最高給与を提供することです。
さらに詳しく説明すると、
2 番目のクエリでは、MIN と DENSE_RANK FIRST が sal 列に適用され、結果は同じ動作になります。したがって、このシナリオでは KEEP 句は冗長です。ただし、名前などの最小値の計算に別の列が使用された場合は、KEEP 句が関連します。
例:
MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)
このクエリは、次のクエリに対応する名前を返します。同じ最低給与に関連付けられた重複した名前を除いた、各部門の最低給与。
以上が「KEEP」句はOracle集計クエリの「PARTITION BY」にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。