dominios y alojamiento web en hostalia

Duda SQL con tablas relacionadas y selects anidados para saber el registro

vuelvo a tener problemas con una consulta sql Tengo una tabla Fabricante(cod_fabricante, nombre,pais) y otra Juguetes(cod_juguete,...

La FAQ Duda SQL con tablas relacionadas y selects anidados para saber el registro tiene

Pertenece a la categoría:

Pregunta
vuelvo a tener problemas con una consulta sql


Tengo una tabla Fabricante(cod_fabricante, nombre,pais)
y otra Juguetes(cod_juguete, cod_fabricante, descripción, precio, edad, stock)


Me piden al nombre del fabricante del cual existe la mayor cantidad de juguetes en una juguetería, pero no logro hacer la consulta sin el empleo de tablas auxiliares, y no me dejan utilizar éstas.


¿Alguien podría ayudarme? muchas gracias!


Respuesta de Alexander Vega
Hola, sería asi:



NOTA: coloque el AS por si lo haces en Access en otros gestores de
Base de Datos no hace falta colocarlo para crear el alias.
Importante: es necesario el IN que esta en el SELECT principal porque
puede haber mas de un fabricante con la misma cantidad de juguetes (y
que esta sea la cantidad maxima que existe)...



SELECT *
FROM FABRICANTE AS A
WHERE a.cod_fabricante in (SELECT
COD_FABRICANTE
FROM
(SELECT B.COD_FABRICANTE, COUNT(*) AS CANTIDAD
FROM FABRICANTE B, JUGUETES C
WHERE B.COD_FABRICANTE = C.COD_FABRICANTE
GROUP BY B.COD_FABRICANTE
HAVING COUNT(*) = (SELECT MAX(CANTIDAD) FROM (SELECT COUNT(*) AS CANTIDAD
FROM FABRICANTE
E, JUGUETES F
WHERE
E.COD_FABRICANTE = F.COD_FABRICANTE
GROUP BY E.COD_FABRICANTE))))



Saludos que sea de gran ayuda,

Complementar la respuestaComplementar la respuesta
Volver al árbol de categoríasVolver al árbol de categorías

Comentarios
Fueron enviados 6 comentarios a la faq
4 comentarios no revisados
2 comentarios revisados:
Por: David Segoviano
16/1/2008
Hola, yo opino que hay una solucion un poco menos compleja.

SELECT F.cod_fabricante, F.nombre, SUM(J.stock) AS cant_jug FROM Fabricante AS F INNER JOIN Juguetes AS J ON F.cod_fabricante=J.cod_fabricante GROUP BY F.cod_fabricante ORDER BY cant_jug DESC LIMIT 0,1

Claro hay que revisar que tabla tiene menos registros para acomodar el JOIN para que sea optimo.

Aqui lo exlico:
-> seleccionas los campos que te interese conocer.
-> se hace la interseccion de las tablas
-> se hace una agrupacion de registros en el campo llave principal. (esto le da sentido al sum de stock o a un count de registros) para sacar el total de juguetes de cada fabricante
-> ordenamos por el contador en orden desendente
-> y limitamos los resultados a 1 desde el registro 0

Espero te sirva.
Exito.
SQL Standar
13/9/2011
las soluciones que utilizan ORDER BY no son estandar ya que "top 1" sirve en SQL Server y "limit" en MySQL. Una solucion sería:

select f.cod_fabricante, f.nombre as 'FABRICANTE',total
from fabricante as f inner join ( select sum(stock) as total,cod_fabricante from juguetes group by cod_fabricante ) as j
on j.cod_fabricante = f.cod_fabricante
where total = (select max(total) from (select sum(stock) as total ,cod_fabrica
from jueguetes group by cod_fabrica) as d )

sl2.

Volver al árbol de categoríasVolver al árbol de categorías

Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...