MySQL - Buscar los máximos o los más de algo

 
Vista:
sin imagen de perfil

Buscar los máximos o los más de algo

Publicado por Maria (1 intervención) el 24/02/2018 13:39:37
Saludos,

1
2
3
4
5
6
SELECT Clientes.Nombre AS clientes, SUM(DetallesFactura.Unidades*DetallesFactura.Precio) AS Facturacion, Clientes.Provincia AS P
FROM DetallesFactura INNER JOIN (Facturas INNER JOIN Clientes AS C ON Facturas.IdCliente=Clientes.IdCliente)
ON DetallesFactura.IdFactura=Facturas.IdFactura GROUP BY Clientes.Nombre HAVING Facturacion >= ALL (
SELECT SUM(DetallesFactura.Unidades*DetallesFactura.Precio) FROM DetallesFactura INNER JOIN (Facturas INNER JOIN Clientes
ON Facturas.IdCliente=Clientes.IdCliente) ON DetallesFactura.IdFactura=Facturas.IdFactura WHERE Clientes.Provincia = C.Provincia
GROUP BY Clientes.IdCliente)

Me gustaría saber si con esta forma de hacerlo obtendría el mismo resultado.

1
2
3
4
5
6
7
CREATE VIEW VISTA AS
SELECT C.Nombre AS Cliente, C.Provincia, SUM(D.Unidades*D.Precio) AS Facturacion FROM DetallesFactura AS D
INNER JOIN (Facturas AS F INNER JOIN Clientes AS C ON F.IdCliente = C.IdCliente) ON F.Id.Factura = D.IdFactura
GROUP BY Cliente
 
SELECT V.Cliente, V.Provincia, V.Facturacion FROM VISTA AS V WHERE Facturacion = (SELECT MAX(Facturacion) FROM Vista
WHERE V.Provincia = Vista.Provincia)

El problema con el primer código es que no termino de entender el uso del ALL. Creo que quiere decir que la condición se cumple si Facturacion es igual o mayor que la Facturacion de todas las combinaciones posibles de los Clientes que pertenecen a la misma Provincia. Que seria igual que usar una vista para encontrar el máximo de cada provincia.

Gracias de antemano, no tengo las tablas para comprobar si funciona.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Manuel
Val: 19
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar los máximos o los más de algo

Publicado por Manuel (10 intervenciones) el 24/02/2018 14:49:25
Estás en lo cierto, ALL se usa cuando quieres comparar con todos los valores y la comparación devolverá true o false... en ese caso solo salen los registros con facturación mayor o igual que el más alto valor de la subquery.

En cuanto a la segunda, pues en lugar de una vista, como en el caso anterior, aunque puedes aplica MAX pues deberías sacar el máximo valor con un subquery y el resultado sería similar. Con la diferencia que el primer código devuelve varios valores la subquery y se comprueban todos a ver si uno es verdad y en usando MAX la subquery solo devolvería el valor Máximo.

hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar