8

既存のテーブルに新しい列を作成しようとしており、select ステートメントを使用して除算を行い、新しい列に挿入するデータを作成しています。私が書いたステートメントのいくつかは個別のクエリとして機能しますが、ステートメントを 1 つのクエリにまとめることができませんでした。

私はまだ SQL を学んでおり、mySQL と PostgreSQL で使用しています。先月 SQL のクラスを受講しましたが、今は自分のスキルを維持するために自分のプロジェクトに取り組もうとしています。

私は MN で 2012 年の選挙結果を使っていくつかの作業を行っており、作業中のデータを理解するためにテーブルで使用しています。

テーブルを変更し、これらのステートメントを単独で使用して新しい列を追加することができました。

ALTER TABLE mn2012ct_geom2 ADD COLUMN obama_pct decimal(10,2)
ALTER TABLE mn2012ct_geom2 ADD COLUMN romney_pct decimal(10,2)

この select ステートメントを使用して、端末アプリケーションで必要な情報を生成することができました。私がここでやろうとしているのは、候補者が投じられた総投票数に対して獲得した投票数から 10 進数を作成することです。

SELECT CAST (obama AS DECIMAL) / CAST (uspres_total AS DECIMAL) 
AS obama_pct FROM mn2012ct_geom2

SELECT CAST (romney AS DECIMAL) / CAST (uspres_total AS DECIMAL) 
AS obama_pct FROM mn2012ct_geom2

ここで、上記のような Alter table ステートメントを使用して、またはこのクエリの前に列を作成する場合は insert ステートメントを使用して、作成した新しい列にこの情報を追加したいと考えています。

次のような複合クエリを試しました。

ALTER TABLE mn2012ct_geom2 ADD COLUMN obama_pct decimal(10,2) AS
(SELECT CAST (obama AS DECIMAL (10,2)) / CAST (uspres_total AS DECIMAL (10,2)) 
AS obama_pct FROM mn2012ct_geom2);

または、alter table ステートメントの代わりに、この行のような Insert コマンドを使用します

INSERT INTO mn2012ct_geom2 (romney_pct) AS
(SELECT CAST (romney AS DECIMAL (10,2)) / CAST (uspres_total AS DECIMAL (10,2)) 
AS romney_pct FROM mn2012ct_geom2);

私がそれをやろうとすると、次のようなエラーが発生します:

ERROR:  syntax error at or near "AS"
LINE 1: ...mn2012ct_geom2 ADD COLUMN obama_pct decimal(10,2) AS (SELECT...

同じselectステートメントを使用して新しいテーブルを作成したときにそのタイプのフォーマットが機能したため、そのようなテーブルの変更と列の追加または挿入が機能すると思いました。

CREATE TABLE obama_pct AS (SELECT CAST (obama AS DECIMAL (10,2)) / CAST (uspres_total     
AS DECIMAL (10,2)) AS obama_pct FROM mn2012ct_geom2);   

あなたが提供できるどんな助けでも、私は大いに感謝します。ここでスタックオーバーフローをグーグル検索して答えを見つけようとしましたが、私が見つけたものはどれも、私がやっていることと完全に一致していないようです。

4

2 に答える 2