MySQL - Problema con vistas y consultas

   
Vista:

Problema con vistas y consultas

Publicado por Arturo (1 intervención) el 21/06/2015 01:40:47
Buenas tardes.
Tengo un problema que no logro solucionar por mi cuenta.
La cuestión es así:
Tal vez crean que no viene al caso, pero quiero explicar el porque recurro a pedir ayuda aquí.
Mi profesor en la universidad que me "da" clase de BD, está incapacitado, y nos está pidiendo que convirtamos, todos los ejercicios que hicimos en Subconsultas (subquery), en Vistas (view). No tengo a quien pedir ayuda, a decir verdad.

Tengo dos problemas, el primero
Creo la vlsta, donde quiero, nombre, apellido (autor), id libro y nombre libro , cantidad (ventas), precio y ganancia
(La BD es una genérica, es Pubs), Ya creo, y todo bien hasta ahí
lo que pasa es que, al querer sacar el libro con más ventas, me saca la cantidad correcta que es del que más a vendido, y hasta el título,pero si hago para el mínimo, me muestra la cantidad, pero el nombre del pasado (máximo).

select titulo, nombre_libro, precio, cantidad, ganancia from Ganancia_Autor;
/*El libro con mayor ganancia*/
select titulo, nombre_libro, precio, cantidad, max(ganancia) from Ganancia_Autor;
/*El libro con menor ganancia*/
select titulo, nombre_libro, precio, cantidad, min(ganancia) from Ganancia_Autor;



La segunda, en una vista no puedo poner una subconsulta, y la necesito
Para, que me muestre bien cosas, ejemplo:

use adventureworks;
select ID, Nombre, Ganancia, anio
from (
select prod.ProductID ID, prod.Name as Nombre, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia,
year(detalles.ModifiedDate) anio from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name, anio) abc
where Nombre = (
select nombreprod
from (
select prod.ProductID ID, prod.Name as nombreprod, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia,
year(detalles.ModifiedDate) anio from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name) abcd
where Ganancia = (
select Max(bcd.Ganancia) as MasVendido
from (
select prod.ProductID ID, Name as Nombre, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia
from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name ) bcd
)
);

Si no pongo el Where nombre = nombreprod
y el where ganancia = masvendido, no me muestra la información que necesito.

Agradecería mucho su ayuda.
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

Problema con vistas y consultas

Publicado por Rafael (57 intervenciones) el 22/06/2015 11:30:37
Algunas cosas chico...

No creo que las consultas que dices te funcionan funcionen... por que ??? Por que le faltan cosas...
Veamos
1
select titulo, nombre_libro, precio, cantidad, ganancia from Ganancia_Autor;
Muestra todos los datos en tu tabla.... hasta ahi bien ...

/*El libro con mayor ganancia*/
select titulo, nombre_libro, precio, cantidad, max(ganancia) from Ganancia_Autor;

Esta consulta es errones tienes una funcion de agregacion y no le indicas los campos que agrupa, por lo tanto deberia fallar (no se como haces para que no marque error) como sea lo correcto seria algo asi, asi obtienes solo el libro con Mayor Ganancia.
1
2
3
4
5
6
7
8
9
10
11
SELECT TOP 1 TITULO
     , NOMBRE_LIBRO
	 , PRECIO
	 , CANTIDAD
	 , MAX(GANANCIA)
FROM   GANANCIA_AUTOR
GROUP  BY TITULO
     , NOMBRE_LIBRO
	 , PRECIO
	 , CANTIDAD
ORDER  BY MAX(GANANCIA) DESC;

/*El libro con menor ganancia*/
Y esta quedaria asi:
1
2
3
4
5
6
7
8
9
10
11
SELECT TOP 1 TITULO
     , NOMBRE_LIBRO
	 , PRECIO
	 , CANTIDAD
	 , MIN(GANANCIA)
FROM   GANANCIA_AUTOR
GROUP  BY TITULO
     , NOMBRE_LIBRO
	 , PRECIO
	 , CANTIDAD
ORDER  BY MIN(GANANCIA);

Y en una vista claro que puedes poner una subconsulta que mensaje de error te da al compilar ??

Saludos
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