我正在使用SQL Server迁移到Postgresql,但我无法识别变量。
在SQL Server中,我写了类似这样的东西,效果很好:
--Compute the probabilities for unique users
declare @users_total decimal(18,2)
select @users_total=count(*) from unique_users_table
select column1, uvs, uvs/@users_totalm as puvs
into probabilities_table
from column_uniquevisits_table
我试图将其翻译成Postgresql,但却出现了错误:
--Compute the probabilities for unique users
declare users_total numeric(18,2);
select users_total=count(*)
from unique_users_table
select coumn1, uvs, uvs/users_total as puvs
insert into probabilitiestable
from column_uniquevisits_table
在Postgresql中编写我最初在SQL Server中编写的内容的正确方法是什么?
答案 0 :(得分:1)
如果要基于选择创建表格,请使用create table as select
。
不需要声明(无论如何都不能在PL / pgSQL函数之外使用)
create table probabilitiestable
as
select column1,
uvs,
uvs::numeric/(select count(*) from count(*) from unique_users_table) as puvs
from column_uniquevisits_table;
强制转换::numeric
是必要的,否则除法将使用整数运算来完成,这意味着您不会获得任何小数值。如果uvs
已经定义为numeric
(或decimal
或float
),那么您不需要这样做。
答案 1 :(得分:1)
我使用交叉连接来创建计数以避免上下文切换并避免对unique_users_table进行多次查询。我们可以使用交叉连接的原因是因为我们知道查询的结果将始终是1条记录。因此,它对结果没有乘法效应。
CREATE table probabilitiestable as
SELECT column1, uvs, uvs/ut.users_total as puvs
FROM column_uniquevisits_table
CROSS JOIN (SELECT count(*) as users_total
FROM unique_users_Table) ut