Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] Obtener el valor mínimo de una tabla

Estas en el tema de Obtener el valor mínimo de una tabla en el foro de Bases de Datos General en Foros del Web. Hola amig@s, necesito obtener el valor mínimo para luego comparar (hallar la diferencia) del resto de valores con ese mínimo. Tengo lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 15/06/2015, 06:41
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Obtener el valor mínimo de una tabla

Hola amig@s, necesito obtener el valor mínimo para luego comparar (hallar la diferencia) del resto de valores con ese mínimo. Tengo lo siguiente:

Código SQL:
Ver original
  1. SELECT num, SUM(valor1+valor2+valor3)total
  2. FROM tablavalores
  3. WHERE valor1>0 AND valor2>0 AND valor3>0
  4. GROUP BY num
  5. ORDER BY total ASC

De aquí obtengo todos los datos ordenados por "total", pero ¿cómo obtengo el mínimo valor de "total" para luego comparar el resto de valores?

Muchas gracias si alguien puede ayudarme...

Última edición por gnzsoloyo; 15/06/2015 a las 06:57
  #2 (permalink)  
Antiguo 15/06/2015, 06:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener el valor mínimo de una tabla

Cita:
¿cómo obtengo el mínimo valor de "total" para luego comparar el resto de valores?
Empieza por explicar a qué valores te refieres cuando hablas del "resto de los valores". ¿Hay otra tabla, o contra qué valores harás esa comparación?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/06/2015, 07:12
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Respuesta: Obtener el valor mínimo de una tabla

Perdón, en la tabla llamada "tablavalores" tengo:

id num valor1 valor2 valor3
1---1----10------12----10
2---1----9--------8-----15
3---2-----11-----10-----9
4---2-----8-------8------8
5---3-----15-----15----15
6---3-----12----12-----12

Con la consulta que indiqué obtengo:
num total diferencia
2-----54----0
1-----64----10
3-----81----27
Lo que quiero conseguir es la diferencia que indico en esta última columna, que no sé como sacarla porque es respecto de los totales.
  #4 (permalink)  
Antiguo 15/06/2015, 07:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener el valor mínimo de una tabla

OK.
Una diferencia es una resta, pero no queda claro qué le restas al "total" obtenido en la consulta. ¿O es que alguno de los campos contiene valores negativos?
Pregunto esto porque si es así, tal como estás representando la tabla de datos no se aprecia... Peri si es eso, la consutla será algo larga, aunque de una simpleza espeluznante:
Mas o menos asi:
Código MySQL:
Ver original
  1. SELECT t1.num, t1.total, ABS(t1.total - t2.total) diferencia
  2. FROM    (SELECT num, SUM(valor1+valor2+valor3)total
  3.            FROM tablavalores
  4.           WHERE valor1>0 AND valor2>0 AND valor3>0
  5.        GROUP BY num) T1
  6.       INNER JOIN
  7.         (SELECT num, SUM(
  8.                         IF(valor1 <= 0, valor1, 0) +
  9.                         IF(valor2 <= 0, valor2, 0) +
  10.                         IF(valor3 <= 0, valor3, 0)
  11.                         )total
  12.            FROM tablavalores
  13.           WHERE valor1 <= 0 OR valor2 <= 0 OR valor3 <= 0
  14.        GROUP BY num) T2 ON T1.nbum = T2.num
  15. ORDER BY T1.total DESC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 15/06/2015 a las 08:03
  #5 (permalink)  
Antiguo 15/06/2015, 08:36
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Respuesta: Obtener el valor mínimo de una tabla

Los valores van a ser siempre cero o positivos y lo que quiero es ordenar de menor a mayor y añadir una columna con la diferencia entre el total del registro que corresponda siempre con el total del registro de referencia que es el del total mas pequeño.
  #6 (permalink)  
Antiguo 15/06/2015, 12:20
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Respuesta: Obtener el valor mínimo de una tabla

Y donde esta la función MIN()???
  #7 (permalink)  
Antiguo 15/06/2015, 12:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
¿Para qué usarás MIN()?

Probemos:
Código MySQL:
Ver original
  1. SELECT   t1.num, t2.total, ABS (t1.total - t2.total) diferencia
  2.     FROM tablavalores T1
  3.          INNER JOIN
  4.          (SELECT   num, SUM (valor1 + valor2 + valor3) total
  5.               FROM tablavalores
  6.              WHERE valor1 > 0
  7.                AND valor2 > 0
  8.                AND valor3 > 0
  9.           GROUP BY num) T2 ON T1.nbum = T2.num
  10. ORDER BY t2.total DESC, T1.total ASC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 15/06/2015, 14:06
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Respuesta: Obtener el valor mínimo de una tabla

Con el MIN debería obtener el total mas pequeño para luego restarselo a cada uno de los totales y asi hallar la diferencia respecto del más pequeño siempre.
  #9 (permalink)  
Antiguo 15/06/2015, 14:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener el valor mínimo de una tabla

¿Respecto de la suma menor, sin importar cuál es el valor de "num"? ¿Es eso? Porque buscar el menor sin agrupar no tiene mucho sentido para realizar la resta....
No me queda claro... ¿Puedes ejemplificar cada ffase para que se entienda mejor tu razonamiento?

1) La tabla de dtos origen.
2) El resultado de la sumatoria agrupada por NUM.
3) Cuál sería el menor valor que tomas como referencia.
4) La tabla resultado final.

Por alli es posible que debas explicarnos qué datos guarda esa tabla de datos, qué representan, y cuál es el concepto sobre el que se hace el agrupamiento. Es decir qué representan en la realidad.
Casos como este no parecen tener sentido a menos que uno sepa qué es lo que se está representando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 15/06/2015, 15:00
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Respuesta: Obtener el valor mínimo de una tabla

En mi segundo post puse ejemplo de tabla con datos y tabla de resultados. ?no se entiende?
  #11 (permalink)  
Antiguo 15/06/2015, 16:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener el valor mínimo de una tabla

No, no se entiende porque lo que te pido son CUATRO ejemplos bien discriminados. Es para entender la secuencia lógica de las consultas necesarias.
Además, te estoy pidiendo que aclares lo que representan los datos en la realidad para hacer un marco conceptual más realista de lo que estás calculando y dar una respuesta más fiable.
Con lo que has posteado no alcanza.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 16/06/2015, 01:22
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Respuesta: Obtener el valor mínimo de una tabla

Perdón, que con el afán de simplificar me expliqué mal o deficientemente, ahí va más claro, a ver si logro explicarme.
Tengo tabla de datos origen:
id numero pasada tiempo1 tiempo2 tiempo3
1.......1.......1..........10.........12.........1 0
2.......1.......2..........18.........8.........10
3.......2.......1...........9.........11.........1 4
4.......2.......2..........10.........14.........1 6
5.......3.......1..........15.........14.........1 1
6.......3.......2..........10.........9.........12
7.......8.......1..........13.........10.........1 2
8.......8.......2..........8.........12.........12
9......10.....1..........11.........11.........17
10....10.....2..........10.........12.........11
El resultado de la sumatoria agrupado por numero es:
numero total
...8.........67 (sale de sumar los tiempos del número 8 en ambas pasadas)
...1.........68
...3.........71
..10........72
...2.........74
En total como ves se suman los tiempos de cada pasada para un mismo número. Se ordena según ese total de menor a mayor.
Ahora lo que pretendo es obtener la diferencia de cada uno respecto al primero, es decir, añadir la columna de diferencia, siempre respecto al mejor total (referencia):
numero total diferencia
...8.........67.....0 (67-67)
...1.........68.....1 (68-67)
...3.........71.....4 (71-67)
..10........72.....5 (72-67)
...2.........74.....7 (74-67)
(Entre paréntesis he añadido sólo una aclaración de lo que busco)
Aprovecho y añado otra columna más, que en principio no había puesto nada pensando iba a ser de forma similar, pero veo que se va a complicar un poco, y es añadir una segunda columna de diferencias, esta vez con el inmediato anterior, es decir, los resultados quedan:
numero total diferencia dif_anterior
...8.........67.....0..............0
...1.........68.....1..............1 (68-67)
...3.........71.....4..............3 (71-68)
..10........72.....5..............1 (72-71)
...2.........74.....7..............2 (74-72)
Esta última columna es nueva y entre paréntesis he puesto lo que hago para obtener el resultado, perdón por aprovechar y añadir esta nueva parte.
  #13 (permalink)  
Antiguo 16/06/2015, 08:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener el valor mínimo de una tabla

Bueno, ahora se entiende mejor.
La primera consulta es posible, pero no es sencilla. Es la combinación de dos consultas diferentes e incompatibles:
Código MySQL:
Ver original
  1. SELECT   num, SUM (valor1 + valor2 + valor3) total
  2. FROM tablavalores
  3. WHERE valor1 > 0
  4.     AND valor2 > 0
  5.     AND valor3 > 0
Código MySQL:
Ver original
  1. SELECT MIN(total) minimo
  2.   (SELECT   num, SUM (valor1 + valor2 + valor3) total
  3.   FROM tablavalores
  4.   WHERE valor1 > 0
  5.       AND valor2 > 0
  6.       AND valor3 > 0
  7.   GROUP BY num) T1;
Esto daría algo como:
Código MySQL:
Ver original
  1. SELECT   num, SUM (valor1 + valor2 + valor3) total, (SUM (valor1 + valor2 + valor3 ) - minimo) diferencia
  2. FROM tablavalores
  3.   JOIN (SELECT MIN(total) minimo
  4.         FROM
  5.           (SELECT   num, SUM (valor1 + valor2 + valor3) total
  6.           FROM tablavalores
  7.           WHERE valor1 > 0
  8.               AND valor2 > 0
  9.               AND valor3 > 0
  10.           GROUP BY num) T1) T2
  11. WHERE valor1 > 0
  12.     AND valor2 > 0
  13.     AND valor3 > 0

La segunda query es posible, pero requiere muchisima práctica en el uso de variables de usuario de MySQL, y francamente no lo veo práctico. Complicaría demasiado la consulta, y te sugiero resolverlo en la aplicación, ya que es muchisimo mas simple hacer ese tipo de procesamiento a medida que vas creando la vistya de la tabla resultado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 16/06/2015, 09:25
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Respuesta: Obtener el valor mínimo de una tabla

Ok muchisimas gracias mañana me pondré a hacer pruebas a ver que tal y lo comunico por aqui.
  #15 (permalink)  
Antiguo 17/06/2015, 02:40
 
Fecha de Ingreso: abril-2015
Mensajes: 45
Antigüedad: 9 años
Puntos: 0
Respuesta: Obtener el valor mínimo de una tabla

Muchísimas gracias, hace poco que he descubierto este foro y cada día aprendo cosas nuevas. Funciona de lujo.

Etiquetas: select, tabla, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:38.