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

[SOLUCIONADO] sum(MAX)

Estas en el tema de sum(MAX) en el foro de Mysql en Foros del Web. Buenas noches a todos. Primero de todo agradeceros vuestro tiempo y vuestra atención. Vereis, quiero calcular el máximo valor de una suma de prodcutos, vamos, ...
  #1 (permalink)  
Antiguo 22/03/2013, 16:47
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
sum(MAX)

Buenas noches a todos.
Primero de todo agradeceros vuestro tiempo y vuestra atención.

Vereis, quiero calcular el máximo valor de una suma de prodcutos, vamos, un MAX(SUM), sé que, desgradaciamente no se pueden anillar funciones de agrupación por las bravas, pero estoy intentando hacerlo con subquerys en la clausula from pero no me hace caso.

Tengo una libreria, en la que hay varias tablas, sé que el cliente que más gastó sólo realizó un pedido pero con contenido igual a 1011 dólares.

y quiero que me diga el nombre del cliente que más gastó, esto se hace cin una suybquery y con ayuda de order by desc limit 1, pero claro ¿qué pasaría si hubiera dos o más clientes que hubieran gastado lo mismo siendo ese gasto el máximo? que se perdería información.

así que lo que intento hacer es una consulta con una subconsulta que a su vez tiene una tabla derivada, es decir, la subconsulta sería:

esto es sólo la subquery:

Código SQL:
Ver original
  1. SELECT MAX(LIBROS.PRECIO * PEDIDO_CONTIENE_LIBRO.CANTIDAD)
  2. FROM LIBROS,CLIENTES,PEDIDO_CONTIENE_LIBRO,PEDIDOS,(
  3. SELECT SUM(LIBROS.PRECIO * PEDIDO_CONTIENE_LIBRO.CANTIDAD )
  4. FROM LIBROS, CLIENTES, PEDIDOS, PEDIDO_CONTIENE_LIBRO          
  5. WHERE CLIENTES.ID_CLIENTE = PEDIDOS.ID_CLIENTE
  6. AND LIBROS.ID_LIBRO = PEDIDO_CONTIENE_LIBRO.ID_LIBRO
  7. AND PEDIDOS.ID_COMPRA = PEDIDO_CONTIENE_LIBRO.ID_COMPRA
  8. GROUP BY (pedido_contiene_libro.id_compra)
  9. )
  10.  
  11. FROM LIBROS,PEDIDO_CONTIENE_LIBRO,LIBROS,CLIENTES
  12. WHERE PEDIDO_CONTIENE_LIBRO.ID_LIBRO=LIBROS.ID_LIBRO
  13. AND LIBROS.ID_LIBRO = PEDIDO_CONTIENE_LIBRO.ID_LIBRO
  14. AND PEDIDOS.ID_COMPRA = PEDIDO_CONTIENE_LIBRO.ID_COMPRA
  15. ;


ESTO QUIERO QUE ME EL MÁXIMO DEL SUM, QUE ES 1011, PERO ME DEVUELVE 945 QUE ES EL MAXIMO DE CADA PEDIDO, DE CADA FILA, EN DEFINITIVA, LA QUERY SÓLO ME HACE LA QUERY PRINCIPAL, PASA DE LARGO Y ES COMO SI LA SUBQUERY NO EXISTIERA.

¿alguna ayuda por favor?
  #2 (permalink)  
Antiguo 22/03/2013, 16:48
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: sum(MAX)

por cierto, la subquery en from tiene alias, olvidé ponerlo, pero no es el motivo del problema
  #3 (permalink)  
Antiguo 22/03/2013, 16:56
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: sum(MAX)

a ver, pongo la consulta entera que además la he copiado mal porque estaba haciendo pruebas:
Código MySQL:
Ver original
  1. SELECT CLIENTES.NOMBRE_CLIENTE,CLIENTES.MAIL
  2. FROM LIBROS, PEDIDOS, PEDIDO_CONTIENE_LIBRO, CLIENTES
  3. WHERE LIBROS.ID_LIBRO = PEDIDO_CONTIENE_LIBRO.ID_LIBRO
  4. AND PEDIDOS.ID_COMPRA = PEDIDO_CONTIENE_LIBRO.ID_COMPRA
  5. AND CLIENTES.ID_CLIENTE = PEDIDOS.ID_CLIENTE
  6. GROUP BY (CLIENTES.NOMBRE_CLIENTE)
  7. HAVING SUM( LIBROS.PRECIO * PEDIDO_CONTIENE_LIBRO.CANTIDAD ) =
  8. (
  9.  
  10.                                    
  11.  
  12.     SELECT MAX(LIBROS.PRECIO * PEDIDO_CONTIENE_LIBRO.CANTIDAD)
  13.     FROM LIBROS,CLIENTES,PEDIDO_CONTIENE_LIBRO,PEDIDOS,(
  14.     SELECT SUM(LIBROS.PRECIO * PEDIDO_CONTIENE_LIBRO.CANTIDAD )
  15.     FROM LIBROS, CLIENTES, PEDIDOS, PEDIDO_CONTIENE_LIBRO          
  16.    WHERE LIBROS.ID_LIBRO = PEDIDO_CONTIENE_LIBRO.ID_LIBRO
  17.   AND PEDIDOS.ID_COMPRA = PEDIDO_CONTIENE_LIBRO.ID_COMPRA
  18.   AND CLIENTES.ID_CLIENTE = PEDIDOS.ID_CLIENTE
  19.     GROUP BY (pedido_contiene_libro.id_compra)
  20.     ) as alias
  21.      
  22.    
  23.     WHERE LIBROS.ID_LIBRO = PEDIDO_CONTIENE_LIBRO.ID_LIBRO
  24.     AND PEDIDOS.ID_COMPRA = PEDIDO_CONTIENE_LIBRO.ID_COMPRA
  25.     AND CLIENTES.ID_CLIENTE = PEDIDOS.ID_CLIENTE
  26.     )
  27.     ;

la cosa está en que me devuelve 0 columnas, lógico porque nadie ha gastado 945 dólares que es lo que me devuelve la subquery, quiero que la subquery me dé 1011 pero la tabla derivada en from parace no ejecutarse por así decirlo
  #4 (permalink)  
Antiguo 22/03/2013, 17:41
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: sum(MAX)

yo mismo me contesto :

Código MySQL:
Ver original
  1. SELECT max(jc.losumao)
  2. FROM ( SELECT SUM(LIBROS.PRECIO * PEDIDO_CONTIENE_LIBRO.CANTIDAD ) as losumao
  3.         FROM LIBROS, PEDIDOS, PEDIDO_CONTIENE_LIBRO, CLIENTES
  4.         WHERE LIBROS.ID_LIBRO = PEDIDO_CONTIENE_LIBRO.ID_LIBRO
  5.         AND PEDIDOS.ID_COMPRA = PEDIDO_CONTIENE_LIBRO.ID_COMPRA
  6.         AND CLIENTES.ID_CLIENTE = PEDIDOS.ID_CLIENTE
  7.         GROUP BY (CLIENTES.NOMBRE_CLIENTE)
  8. ) as jc
  9. ;

Última edición por gnzsoloyo; 22/03/2013 a las 18:31

Etiquetas: select, tabla
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 12:41.