En el servidor SQL, escribí la siguiente secuencia de comandos para calcular las razones de probabilidades en función de las probabilidades de mi grupo de prueba divididas por mi grupo de control. El guión es el siguiente:
--Compute the odds ratios from the model select a.column1, a.uvs as testuvs. b.uvs as controluvs , [odds]=case when b.uvs>0 then a.puvs/b.puvs else Null end into unique_visitor_odds from control_probabilties b inner join test_probabilities a on a.column1=b.column2 where a.uvs>24 and b.uvs>24 order by [odds] descNo estoy seguro de cómo escribir esto en Postgresql.
El código es notablemente similar:
create table unique_visitor_odds as select tp.column1, tp.uvs as testuvs, cp.uvs as controluvs, tp.puvs / nullif(cp.puvs, 0) as odds from control_probabilties cp inner join test_probabilities tp on tp.column1 = cp.column2 where cp.uvs > 24 and tp.uvs > 24 order by odds desc ; Eliminé la declaración del case en el select . Eso es manejado por el where . Postgres es lo suficientemente inteligente como para respetar el where al informar errores. Y puede evitar una división por cero usando nullif() .
Excepto para las cláusulas create table as y into , el mismo código funciona en ambas bases de datos.
Además, el order by es sospechoso. De hecho, estoy sorprendido de que SQL Server lo permita.
Además del tipo potencial entre la segunda y la tercera columna en la cláusula SELECT y la sintaxis del alias extraño, todo debería traducirse a postgres fácilmente:
SELECT a.column1, a.uvs AS testuvs, b.uvs AS controluvs, CASE WHEN b.uvs > 0 THEN a.puvs / b.puvs ELSE NULL END AS odds INTO unique_visitor_odds FROM control_probabilties b INNER JOIN test_probabilities a ON a.column1 = b.column2 WHERE a.uvs > 24 AND b.uvs > 24 ORDER BY odds DESC