1

製品のリリースごとの特定のアイテムの量をリストする2つの列を持つテーブルがあります。2つの列の間の増加率を計算し、それをテーブルの新しい列に追加する必要がありますが、これに関連するドキュメントが見つかりませんか?私はPostgres9.0を使用していますが、リリース間にデータの欠落や誤りがないことを確認するために、QCプロセスの一部として2つの列間の増加率を調べる必要があります。

テーブルの定義は次のとおりです。

oid oid[] NOT NULL,
"State" character varying(2)[] NOT NULL,
release_1121 numeric NOT NULL,
release_1122 numeric NOT NULL,
CONSTRAINT oid PRIMARY KEY (oid)

パーセンテージ増加列を追加して、正しいパーセンテージを入力したいと思います。

4

2 に答える 2

4

これがあなたが実際に必要としているものだと思います

テーブルは次のようになります。

CREATE TABLE release (
release_id integer PRIMARY KEY,    -- pk is NOT NULL automatically
-- state varchar(2)[] NOT NULL,    -- ??
amount numeric NOT NULL
);

テストデータ:

INSERT INTO release VALUES (release_id, amount)
  (1121, 25)
, (1122, 30)
, (1123, 90)
, (1124, 10);

クエリ:

WITH x AS (
    SELECT *
         , lag(amount) OVER (ORDER BY release_id) as last_amount
    FROM   release
    )
SELECT release_id, amount
     , (amount - last_amount) AS abs_change
     , round((100 * (amount - last_amount)) / last_amount, 2) AS percent_change
FROM   x
ORDER  BY release_id;

CTE(WITH句)とウィンドウ関数lag()にはPostgreSQL8.4以降が必要です。
結果:

release_id | amount | abs_change | percent_change
-----------+--------+------------+---------------
1121       | 25     | <NULL>     | <NULL>
1122       | 30     | 5          |  20.00
1123       | 90     | 60         | 200.00
1124       | 10     | -80        | -88.89
于 2012-05-10T15:04:57.583 に答える
2

パーセンテージ増加列の追加は1回限りの操作であり、次のように実行できます(ドキュメントの詳細)。

ALTER TABLE target ADD pct float;

次に、テーブルを更新して、新しい値を入力します。

UPDATE target SET pct = (after::float - before::float) / before::float;
于 2012-05-10T14:30:47.377 に答える