Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Oracle (http://www.forosdelweb.com/f100/)
-   -   Realizar operación aritmética con el resultado de dos consultas (http://www.forosdelweb.com/f100/realizar-operacion-aritmetica-con-resultado-dos-consultas-505640/)

programadornet 16/07/2007 05:17

Realizar operación aritmética con el resultado de dos consultas
 
Quiero saber si desde Oracle puedo realizar una operación con el resultado de dos consultas (o con un campo del resultado de dos consultas), por ejemplo, dividir lo que arroje la consulta 1 (que será un número, por ejemplo resultado de realizar un count) entre lo que arroje la consulta 2.

¿Hay alguna instrucción para realizarlo todo desde Oracle, o tendré desde fuera de Oracle realizar la operación?

MACGREGOR 16/07/2007 06:58

Re: Realizar operación aritmética con el resultado de dos consultas
 
Oracle te permite realizar casi cualquier operación matemática! :D

Mira si existe alguna función predefinida por oracle para realizar la operación que deseas (en caso de que quieras hacer algun arcoseno, tangentes lalalala...)

Cuando sepas que función de oracle puedes utilizar mira como funcionan sus argumentos.

Tomando el ejemplo que tu mismo pones con la división miramos que el "operador" utilizado para la operación es "/" y necesita 2 números como argumentos.

Supongamos que la consulta_1 y la consulta_2 devuelven un único valor numérico cada una.

Podrías hacer lo siguiente:

select (consulta_1)/(consulta_2) from dual;

El resultado de esta consulta te daría la división, pero podrías realizar cualquier otra operación con los resultados de tus dos consultas.

programadornet 16/07/2007 11:34

Re: Realizar operación aritmética con el resultado de dos consultas
 
¡Ok, gracias! Había probado poniendo directamente los operadores, pero lo que no sabía era que tenía que utilizar la tabla dual.

programadornet 17/07/2007 03:12

Re: Realizar operación aritmética con el resultado de dos consultas
 
Me queda una duda: ¿cómo hacer que la operación se haga con consultas que devuelvan varios registros?

Es decir, si tengo consulta1 y consulta2, y ambas arrojan un valor, hacer consulta1/consulta2 está claro que dará un valor.

¿Pero y si tengo que consulta1 y consulta2, tienen un "group by CAMPO_X", por el cual obtienen varios valores, y quiero realizar la operación para cada campo equivalente entre la 1 y la 2? (y obtener así una tabla de salida que tenga los resultados, que serían los de dividir el registro 1 de la consulta 1 entre el registro 1 de la consulta 2, el registro 2 de la consulta 1 entre el 2 de la 2, y así).

jc3000 17/07/2007 03:27

Re: Realizar operación aritmética con el resultado de dos consultas
 
Deberías hacer una join con las dos consultas y un valor de tadas la sfilas devueltas será el resultado de la operación atritmetica

programadornet 17/07/2007 05:14

Re: Realizar operación aritmética con el resultado de dos consultas
 
Cita:

Iniciado por jc3000 (Mensaje 2070095)
Deberías hacer una join con las dos consultas y un valor de tadas la sfilas devueltas será el resultado de la operación atritmetica

¿Puedes explicarlo mejor?

Yo tengo:

select (consulta_1)/(consulta_2) from dual;

¿Cómo dices de hacer el join ahí?

jc3000 17/07/2007 06:17

Re: Realizar operación aritmética con el resultado de dos consultas
 
Depende de las dos consultas y que te devuelvan el mismo nº de filas

programadornet 18/07/2007 02:03

Re: Realizar operación aritmética con el resultado de dos consultas
 
Si las dos te devuelven dos filas, con dos columnas de la cual una es con la que quieres hacer la operación, por ejemplo (y quieres mostrar el resultado de dividir el campo de cada tabla entre su correspondiente en la otra).

Por ejemplo:

Consulta 1:
Campo1 Campo2
A............... 55
B................60

Consulta2:

Campo1 Campo2
A.................10
B.................30


Y queremos obtener la tabla:

Campo1 ResultadoDivision
A .................55/10
B..................60/30

¿Cómo se haría en este caso sencillo?

MACGREGOR 19/07/2007 03:41

Re: Realizar operación aritmética con el resultado de dos consultas
 
Lo que necesitas es hacer la siguiente consulta

select t1.campo1, (t1.campo2)/(t2.campo2) Resultado
from tabla_1 t1,
tabla_2 t2
where t1.campo1=t2.campo1

Si las dos tablas tienen una cantidad diferente de registros deberías hacer algo así:

select t1.campo1, (nvl(t1.campo2,0))/(nvl(t2.campo2,1)) Resultado
from tabla_1 t1,
tabla_2 t2
where t1.campo1=t2.campo1(+)

programadornet 19/07/2007 11:38

Re: Realizar operación aritmética con el resultado de dos consultas
 
Gracias, pero el problema está en que no es una comparación entre dos campos, sino entre dos campos DE DOS CONSULTAS DIFERENTES sobre una misma tabla, y cada consulta obtiene los datos mediante un count(*) y group by (o sea, que arroja una serie de cuentas agrupadas por el valor de cierta columna).

programadornet 02/08/2007 04:26

Re: Realizar operación aritmética con el resultado de dos consultas
 
Hola!

He visto que me has respondido en el subforo de base de datos.

¿Puedes decirme cómo poner un alias (como los que pones de t1) o un nombre a una consulta?

MACGREGOR 02/08/2007 07:39

Re: Realizar operación aritmética con el resultado de dos consultas
 
Hola,

En mi último mensaje te dije que hicieras esta consulta.

select t1.campo1, (t1.campo2)/(t2.campo2) Resultado
from tabla_1 t1,
tabla_2 t2
where t1.campo1=t2.campo1

lo único que debes hacer es hacer la misma estructura, pero en lugar de con tablas con las consultas que quieras.

select t1.campo1, (t1.campo2)/(t2.campo2) Resultado
from

(select x.id campo1, x.cantidad campo2 from tabla_X x where "condiciones") t1,
(select y.id campo1 sum(y.numero) campo2 from tabla_Y y where "condiciones" group by ...) t2

where t1.campo1=t2.campo1

Lo que te pongo en negrita son Alias, los nombres que le pongo a cada campo, consulta o tabla.

Solo tienes que poner tus consultas en lugar de las que he puesto de ejemplo.

Espero que ahora ya te funcione todo perfecto.

Un saludo.


La zona horaria es GMT -6. Ahora son las 11:29.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.