2009-11-22 27 views
6

Usando PostgreSQL, suponiendo una tabla como la siguiente:expresión matemática Postgres calculcated para cada fila en la tabla

12184 |    4 |   83 
12183 |    3 |   171 
12176 |    6 |   95 

¿Cómo puedo calcular una expresión matemática para cada fila de la tabla?

Por ejemplo, para dividir la columna 2 de la columna 3, de tal manera que la salida sería:

12184 | 0.04819277108 
12183 | 0.01754385965 
12176 | 0.06315789474 

Mi reacción fue intentar:

SELECT col1, col2/col3 FROM table_name; 

Pero que devolver el techo (es decir. redondeada) parte entera, necesito el valor del punto flotante.

Respuesta

9

truco fundido típico necesarios porque col2 y col3 son números enteros (por lo resultado por defecto es un entero)

select col1, col2/col3*1.0 from table 

o

select col1, col2/col3::float from table 

o (modo estándar SQL)

select col1, col2/cast(col3 as float) from table 
+0

Muchas gracias a todos. De hecho, utilicé lo siguiente: SELECCIONE col1, fundido (col2 como flotador)/fundido (col3 como flotante) FROM table; ¿Hay alguna razón para preferir una vía opuesta a otra? – nwb

+0

Consulte http://www.postgresql.org/docs/8.4/interactive/typeconv.html para obtener detalles. De hecho, prefiero tu manera, ya que es estándar, el formulario :: type es una extensión de PostgreSQL. –

+0

Y, como puedes ver en mis ejemplos, puedes escapar fundiendo solo el denominador. –

0
select col1, col2/col3 from table; 

Debería funcionar. ¿No son numéricos col2 y col3?

+0

Sí, sin embargo requieren que el valor de punto flotante, y Postgres solamente está regresando la parte entera. – nwb

1

Se pueden utilizar expresiones aritméticas en la cláusula SELECT, así:

SELECT col1/col2 AS new_name 
FROM t 
0

Try consulta como esta:

SELECT col1, col2/col3::float FROM table_name; 
0

En PgSQL se escriben las columnas. Entonces si quieres operador en ellos; necesitas lanzar la columna.

suponga que tiene una columna 'minutos' y quieres añadir '5' en cada valores de la columna '' mintuos

Debido a que está agregando valor entero y la columna de minutos debe ser un número entero sólo entonces la adición puede ser llevado a cabo.

manera incorrecta, por lo tanto:

select *, minutes+5 from my table >> error de sintaxis

select *, minutes::int + 5 from mytable >> dar la salida

Cuestiones relacionadas