Oracle の集計関数は、group by グループ化の後に実行されるため、partition by などの集計関数でのグループ化は、全体の選択が完了した後に結果セットで実行されます。集計関数グループ化; 集計関数は、集計の基礎として group by group を使用するか、partition by を使用してグループ自体を定義し、集計操作を実行できます。
ウィンドウ関数と集計関数の違い
集計関数は通常、集計結果と集計のキー フィールドのみを返します. 集計された列以外の列の値を返す必要がある場合は、ウィンドウ関数を使用する必要があります. 集計関数とは異なり、ウィンドウ関数は集計結果を元の結果セットにマージします
使用シナリオ: たとえば、テーブル Table1 に列 KEY、VALUE、および DATE があります。
キー(学生) | 値(グレード) | DATE(日付) |
---|---|---|
張三 | 89 | 2021/01/02 |
張三 | 72 | 2021/11/12 |
李思 | 63 | 2021/10/12 |
李思 | 91 | 2021/11/14 |
特定のビジネスでは、学生に従って要約し、重複を削除し、最新の日付の
Group BY ステートメントの結果のみを取得する必要があります。
SELECT A.KEY,A.VALUE,A.DATE FROM TABLE1 A
(SELECT MAX(DATE),KEY FROM TABLE1 GROUP BY KEY) B
WHERE A.KEY = B.KEY AND A.DATE = B.DATE
GROUP BY の結果:
キー(学生) | 値(グレード) | DATE(日付) |
---|---|---|
張三 | 72 | 2021/11/12 |
李思 | 91 | 2021/11/14 |
ウィンドウ関数 FIRST_VALUE を使用して、KEY で集計した後、ORDER で並べ替えられた最初の項目を取得します。FIRST_VALUE(A.VALUE)OVER( PARTITION BY A.KEY ORDER BY A.DATE DESC)
SELECT KEY,FIRST_VALUE(A.VALUE)OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS NVALUE,VALUE,DATE FROM TABLE1 A
ウィンドウ関数の結果
キー(学生) | 値(グレード) | NVALUE(最新グレード) | DATE(日付) |
---|---|---|---|
張三 | 89 | 72 | 2021/01/02 |
張三 | 72 | 72 | 2021/11/12 |
李思 | 63 | 91 | 2021/10/12 |
李思 | 91 | 91 | 2021/11/14 |
次に、重複を削除し、ROW_NUMBER() を使用して同じ種類のデータを記録し、最新のアイテムを除外しますROW_NUMBER() OVER( PARTITION BY A.KEY ORDER BY A.DATE DESC)
SELECT * FROM (SELECT KEY,FIRST_VALUE(A.VALUE)OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS NVALUE,ROW_NUMBER() OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS
RWORDER ,VALUE,DATE FROM TABLE1 A) WHERE RWORDER =1
最終結果
キー(学生) | 値(グレード) | NVALUE(最新グレード) | DATE(日付) | んん |
---|---|---|---|---|
張三 | 72 | 72 | 2021/11/12 | 1 |
李思 | 91 | 91 | 2021/11/14 | 1 |
https://blog.csdn.net/qq_41708308/article/details/89374701
https://blog.csdn.net/qq_37816503/article/details/108408875