我正在尝试在现有表中创建一个新列,并使用select语句进行除法以创建我想要插入到我的新列中的数据 . 我写的几个语句将作为单独的查询工作,但我无法将语句串在一起形成一个查询 .
我仍在学习SQL并将其与mySQL和PostgreSQL一起使用 . 上个月我参加了一个关于SQL的课程,现在我正在尝试自己的项目以保持我的技能 .
我正在做一些有关2012年在MN的选举结果的工作,以便在我的表格中使用,以了解我正在使用的数据 .
我已经能够改变我的表并使用它们自己添加这些语句的新列 .
ALTER TABLE mn2012ct_geom2 ADD COLUMN obama_pct decimal(10,2)
ALTER TABLE mn2012ct_geom2 ADD COLUMN romney_pct decimal(10,2)
我能够使用这个select语句在我的终端应用程序中生成我想要的信息 . 我在这里要做的是从候选人投票的总票数中创建一个十进制数 .
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表语句或者如果我在此查询之前创建列,则使用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);
或者使用类似于此行的Insert命令而不是alter table语句
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...
我认为那种Alter表和添加列或插入将起作用,因为当我使用相同的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);
任何帮助,你可以提供我将不胜感激 . 我一直在尝试google并在stackoverflow上搜索,以找到答案,但我找到的所有内容似乎都不适合我正在做的事情 .
2 回答
通常,将计算数据添加到表中并不是一个好主意 . 在重新规范表时,有时需要这样做,但通常不会这样做 .
正如戈登所说,这里适当的做法是create a view . 见the tutorial .
没有
ALTER TABLE ... ADD COLUMN ... AS
. 你不能只是编写语法,你需要查看documentation for the command you're interested in以了解如何使用它 .psql
中的\h
命令也很有用,例如\h alter table
.如果确实需要根据其他列的计算在新列中设置值,请在创建列后使用ALTER TABLE ... ADD COLUMN ... DEFAULT ...,然后使用
DROP
DEFAULT
术语 . 通常最好将列空白并为空,然后用UPDATE
语句填充它 .例如 . 未经测试的例子:
或者,有些丑陋:
我想你正在寻找
update
声明 . 例如:您可能还会考虑创建一个视图来进行计算: