条件に基づく平均合計

user3925023

私はこのテーブルとデータサンプルをPostgresデータベースに持っています

CREATE TABLE testAAA(Id integer PRIMARY KEY, datum date, COLA text, COLB text, COLC text, COLD int);

/* Create few records in this table */
INSERT INTO testAAA VALUES(1,to_date('01/01/2018','dd/mm/yyyy'),'PLANTA','VENDORA','OPA','1');
INSERT INTO testAAA VALUES(2,to_date('01/02/2018','dd/mm/yyyy'),'PLANTA','VENDORA','OPA','1');
INSERT INTO testAAA VALUES(3,to_date('01/03/2018','dd/mm/yyyy'),'PLANTA','VENDORA','OPA','1');
INSERT INTO testAAA VALUES(4,null,'PLANTA','VENDORA','OPA','1');
INSERT INTO testAAA VALUES(5,to_date('01/10/2018','dd/mm/yyyy'),'PLANTA','VENDORA','OPA','5');
INSERT INTO testAAA VALUES(6,to_date('01/10/2018','dd/mm/yyyy'),'PLANTA','VENDORA','OPA','10');
INSERT INTO testAAA VALUES(7,to_date('01/11/2018','dd/mm/yyyy'),'PLANTA','VENDORB','OPA','50');
INSERT INTO testAAA VALUES(8,to_date('01/10/2018','dd/mm/yyyy'),'PLANTA','VENDORA','OPA','10');
INSERT INTO testAAA VALUES(9,to_date('01/11/2018','dd/mm/yyyy'),'PLANTA','VENDORA','OPB','5');
COMMIT;

私は条件と組み合わせに基づいて平均合計を作ろうとしています:

SELECT COLA,COLB,COLC,
CASE
  WHEN (datum >= now() - interval '6 month') THEN SUM(COLD)/6
  ELSE '0'
END AS datum_range
FROM testAAA
group by COLA,COLB,COLC;

私の目標は、COLA + COLB + COLCを組み合わせて使用​​し、DATE間隔条件が満たされた場合に、null値をスキップして、COLD列の過去6か月の平均を生成することです。

現在、次のエラーが発生しています。

Error(s), warning(s):

42803: column "testaaa.datum" must appear in the GROUP BY clause or be used in an aggregate function

上記のエラーを修正するにはどうすればよいですか?

S-マン

デモ:db <>フィドル

SELECT *,
    SUM(COLD) FILTER (WHERE datum >= now() - interval '6 month') OVER (PARTITION BY COLA, COLB, COLC) / 6.0 as avg
FROM testAAA

結果:

| id |      datum |   cola |    colb | colc | cold |                avg |
|----|------------|--------|---------|------|------|--------------------|
|  1 | 2018-01-01 | PLANTA | VENDORA |  OPA |    1 |  4.166666666666667 |
|  2 | 2018-02-01 | PLANTA | VENDORA |  OPA |    1 |  4.166666666666667 |
|  3 | 2018-03-01 | PLANTA | VENDORA |  OPA |    1 |  4.166666666666667 |
|  4 |     (null) | PLANTA | VENDORA |  OPA |    1 |  4.166666666666667 |
|  5 | 2018-10-01 | PLANTA | VENDORA |  OPA |    5 |  4.166666666666667 |
|  6 | 2018-10-01 | PLANTA | VENDORA |  OPA |   10 |  4.166666666666667 |
|  8 | 2018-10-01 | PLANTA | VENDORA |  OPA |   10 |  4.166666666666667 |
|  9 | 2018-11-01 | PLANTA | VENDORA |  OPB |    5 | 0.8333333333333334 |
|  7 | 2018-11-01 | PLANTA | VENDORB |  OPA |   50 |  8.333333333333334 |

[デモ:db <> fiddle] [4]

  1. 使用するウィンドウ関数は、 SUM(...) OVER (PARTITION BY ...)あなたが内部のようにSUM集計を行うことができますGROUP句が、元の行を保持しています。集計は別の列として追加されます。
  2. FILTER句を使用すると、集計関数の入力をフィルタリングできます。したがって、次の行のみを集約できます。datum >= ...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

条件に基づく合計

分類Dev

行列条件に基づくExcelの合計

分類Dev

条件に基づく列の合計

分類Dev

条件に基づく計算

分類Dev

pandas / pythonの条件に基づく加重平均計算

分類Dev

基準/条件に基づく平均NumpyPython

分類Dev

合計日数に基づく時間ごとの平均行数

分類Dev

行と列の条件の基準に基づく合計

分類Dev

MS Access、基準に基づく条件付き合計

分類Dev

特定の条件に基づく累積合計

分類Dev

columnsNの条件に基づくcolumnAのPythonDataFrame合計値

分類Dev

パンダの条件に基づく列値の合計

分類Dev

R:条件に基づく単一列の合計

分類Dev

条件に基づくSQLServerの現在の合計

分類Dev

特定の条件に基づく動的列の合計

分類Dev

条件に基づく隣接する列の合計

分類Dev

Rのifelse条件に基づくdata.frameの列の合計?

分類Dev

現在の合計値に基づく条件でSUM()OVER

分類Dev

条件付き列に基づく合計値

分類Dev

複数の条件に基づくExcelの合計値

分類Dev

他の列の条件に基づく累積合計

分類Dev

Excelの基準に基づく合計

分類Dev

Excel:基準に基づく合計(SUMIF)

分類Dev

ラジオボタンの選択に基づく現在の合計平均

分類Dev

ラジオボタンの選択に基づく現在の合計平均

分類Dev

複数の条件に基づく累計

分類Dev

JOINと集計条件に基づくSQLDELETE

分類Dev

col値に基づくMySQLの合計

分類Dev

結合に基づくSQLServer計算列