SASコード(PROC SQL
)を(postgres)SQLに変換する必要があります。特に、クエリで定義された変数を同じクエリで直接再利用できるようにするSASのcalculated
キーワード別の変数の計算のために:1つのテーブルスキャンで複数の列演算をグループ化する
SELECT
id,
sum(case
when (sales > 0) then 1
when (sales = 0) then 0
else -1
end) as pre_freq,
(case
when calculated pre_freq > 0 then calculated pre_freq
else 1
end) as freq
FROM my_table
GROUP BY id
これは、SQLで(私の知る限り)ことはできませんので、私は計算の各ステップを打破する必要があります。
私が理解しているように、小さなテーブルスキャンではなく、複数のテーブルスキャンの代わりに、より多くの計算と少ないテーブルスキャン、つまりスキャン中の計算を行う方がよいということを知っていました。計算ステップ。
SELECT
id
, greatest(1, sum(case
when (sales > 0) then 1
when (sales = 0) then 0
else -1
end) as freq
FROM
my_table
GROUP BY id
か::私は使用することができ、この特定のexempleで
SELECT
id
, (case when sum(case
when (sales > 0) then 1
when (sales < 0) then -1
else 0
end) > 0 then sum(case
when (sales > 0) then 1
when (sales < 0) then -1
else 0
end) else 1 end) as freq
FROM
my_table
GROUP BY id
...読みにくくなり始めている...
- がありますとにかく繰り返されるSQLコードのスニペットの変数を定義するには?
- もっと一般的に言えば、このイラストレーションは最高の(最も効率的な)アプローチでしたか?
これらの1、-1、0のフラグを表す新しい列を追加してから、合計してください。 – Veljko89
どちらの代替も 'id'でグループ化する必要があります。私はSASについて知らない。それはあなたが欲しいものですか? 'freq'を' id'で実行しますか? –
@ClodoaldoNeto確かにsasとsqlの両方のためです。編集されました。 – ant1j