Estoy pasando de usar SQL Server a Postgresql y tengo problemas para definir una variable.
En SQL Server escribí algo como esto, que funciona bien:
--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_tableIntenté traducirlo a Postgresql así pero obtuve errores:
--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¿Cuál es la forma correcta de escribir lo que originalmente tenía en SQL Server en Postgresql?
Si desea crear una tabla basada en una selección, use create table as select .
No hay necesidad de una declaración (que de todos modos no se puede usar fuera de una función 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; El cast ::numeric es necesario porque, de lo contrario, la división se haría con aritmética de enteros, lo que significa que no obtendrías ningún valor fraccionario. Si uvs ya está definido como numeric (o decimal o float ), entonces no lo necesita.
Usaría una unión cruzada para crear el conteo para evitar los cambios de contexto y evitar múltiples consultas a la tabla_usuarios_únicos. La razón por la que podemos usar una combinación cruzada es porque sabemos que el resultado de la consulta siempre será 1 registro. Por lo tanto, no tiene un efecto de multiplicación en los resultados.
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