Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Oracle

Respuesta
 
Herramientas Desplegado
Antiguo 16-jul-2007, 05:17   #1 (permalink)
programadornet ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 160
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?
programadornet está desconectado   Responder Citando
Antiguo 16-jul-2007, 06:58   #2 (permalink)
MACGREGOR está en el buen camino
 
Avatar de MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
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.
MACGREGOR está desconectado   Responder Citando
Antiguo 16-jul-2007, 11:34   #3 (permalink)
programadornet ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 160
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.

Última edición por programadornet; 16-jul-2007 a las 11:44.
programadornet está desconectado   Responder Citando
Antiguo 17-jul-2007, 03:12   #4 (permalink)
programadornet ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 160
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í).

Última edición por programadornet; 17-jul-2007 a las 03:23.
programadornet está desconectado   Responder Citando
Antiguo 17-jul-2007, 03:27   #5 (permalink)
jc3000 ha deshabilitado el karma
 
Fecha de Ingreso: junio-2007
Mensajes: 263
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
jc3000 está desconectado   Responder Citando
Antiguo 17-jul-2007, 05:14   #6 (permalink)
programadornet ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Re: Realizar operación aritmética con el resultado de dos consultas

Cita:
Iniciado por jc3000 Ver Mensaje
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í?
programadornet está desconectado   Responder Citando
Antiguo 17-jul-2007, 06:17   #7 (permalink)
jc3000 ha deshabilitado el karma
 
Fecha de Ingreso: junio-2007
Mensajes: 263
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
jc3000 está desconectado   Responder Citando
Antiguo 18-jul-2007, 02:03   #8 (permalink)
programadornet ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 160
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?
programadornet está desconectado   Responder Citando
Antiguo 19-jul-2007, 03:41   #9 (permalink)
MACGREGOR está en el buen camino
 
Avatar de MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
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(+)

Última edición por MACGREGOR; 19-jul-2007 a las 03:47.
MACGREGOR está desconectado   Responder Citando
Antiguo 19-jul-2007, 11:38   #10 (permalink)
programadornet ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 160
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 está desconectado   Responder Citando
Antiguo 02-ago-2007, 04:26   #11 (permalink)
programadornet ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 160
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?
programadornet está desconectado   Responder Citando
Antiguo 02-ago-2007, 07:39   #12 (permalink)
MACGREGOR está en el buen camino
 
Avatar de MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
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.
MACGREGOR está desconectado   Responder Citando
Respuesta

Calificación: Calificación de Tema: 1 votos, 5,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 06:20.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93