Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Mar May 26, 2015 2:44 am  Asunto:  Consulta ejercicio SQL Responder citandoFin de la PáginaVolver arriba

Hola, tengo la siguiente tabla:

CREATE TABLE ARTICULOS
(`codA` int, `nombre` varchar(15), `precio` int, `codF` int)
;
INSERT INTO ARTICULOS
(`codA`, `nombre`, `precio`, `codF`)
VALUES
(1, 'remera', 100, 1),
(2, 'zapatos', 600, 1),
(3, 'zapatillas', 650, 1),
(4, 'buso', 250, 2),
(5, 'campera', 300, 2),
(6, 'guantes', 20, 3),
(7, 'bufanda', 25, 4),
(8, 'gorro', 40, 4),
(9, 'camisa', 200, 4)
;

y quiero que me muestre los codigos de fabricante (codF) que fabrican la mayor cantidad de prendas.
A ojo puede verse que la salida es esta:

codF | max(prendas)
------------------------
1 | 3
4 | 3

¿Cual seria el codig SQL que me resuelve esa consulta?

Saludos!


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
jroman
Nivel 3



Registrado: 17 Ene 2012
Mensajes: 42


blank.gif
MensajePublicado: Mar Jun 02, 2015 12:04 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

algo asi
select cod_fab ,max(prendas) from tabla
group by cod_fab
order by cod_fab; //esto no es necesario pero es para que quede ordenado por id


   OfflineGalería Personal de jromanVer perfil de usuarioEnviar mensaje privado
karajero
Nivel 8


Edad: 34
Registrado: 15 Nov 2009
Mensajes: 890

Carrera: Sistemas
burkinafaso.gif
MensajePublicado: Mar Jun 02, 2015 2:39 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

jroman escribió:
algo asi
select cod_fab ,max(prendas) from tabla
group by cod_fab
order by cod_fab; //esto no es necesario pero es para que quede ordenado por id


Algo así es lo que decís:

select codF ,count(codF) as cantidad from ARTICULOS
group by codF
order by cantidad DESC

(lo podés probar acá: http://sqlfiddle.com/#!9/bd32a/21/0)

Igual lo ideal sería que limite los resultados al max de cantidad, pero si usás la función max te trae un sólo resultado. No sé cómo reemplazar esa función por algo que te traiga filas repetidas y evitando usar tantas subconsultas.
Lo mejor que pude hacer es esto que funciona, pero es una chanchada:

SELECT * FROM (
SELECT * FROM (
SELECT codF, count(codF) as cantidad
FROM ARTICULOS
GROUP BY codF
) AS subquery1
LEFT JOIN (
SELECT max(cantidad) AS maximo FROM (
SELECT codF, count(codF) AS cantidad
FROM ARTICULOS
GROUP BY codF
) AS sarasa
) as subquery2
ON subquery1.cantidad = subquery2.maximo
) as result
WHERE maximo is not null

http://sqlfiddle.com/#!9/bd32a/53/0

Quizás alguien traiga una solución mejor.

_________________
Image

Capricornio Género:Masculino Serpiente OfflineGalería Personal de karajeroVer perfil de usuarioEnviar mensaje privado
loonatic
Nivel 9


Edad: 32
Registrado: 16 May 2009
Mensajes: 1256

Carrera: Sistemas
CARRERA.sistemas.3.jpg
MensajePublicado: Mar Jun 02, 2015 11:13 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Código:

select codF
from ARTICULOS
group by codF
having count(codF) >= ALL (select count(b.codF)
                              from ARTICULOS b
                              group by b.codF)


Primero te traés las cantidades de prendas fabricadas, después buscas los ID de los fabricantes que fabriquen igual o más cantidad.

Ojo con algo, el enunciado original no te pide que listes la cantidad fabricada, solo los ID.


Geminis Género:Femenino Cabra OfflineGalería Personal de loonaticVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
SorLali
Nivel 9


Edad: 91
Registrado: 01 Jul 2009
Mensajes: 1205

Carrera: Informática y Sistemas
italy.gif
MensajePublicado: Mie Jun 03, 2015 10:50 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

En el parcial, para un ejercicio parecido se me ocurrio lo siguiente:

Código:
select codF, count(*) from ARTICULOS group by codF order by count(*) desc limit 1;


Recuerdo que me levante a preguntar si limit esta permitido (no recuerdo si es estandar) aunque no recuerdo que me contestaron X-D

_________________
Foros-FIUBA o muerte

Piscis Género:Femenino Gallo OfflineGalería Personal de SorLaliVer perfil de usuarioEnviar mensaje privado
SorLali
Nivel 9


Edad: 91
Registrado: 01 Jul 2009
Mensajes: 1205

Carrera: Informática y Sistemas
italy.gif
MensajePublicado: Mie Jun 03, 2015 10:56 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

SorLali escribió:
En el parcial, para un ejercicio parecido se me ocurrio lo siguiente:

Código:
select codF, count(*) from ARTICULOS group by codF order by count(*) desc limit 1;


Recuerdo que me levante a preguntar si limit esta permitido (no recuerdo si es estandar) aunque no recuerdo que me contestaron X-D


Perdon, lo anterior solo sirve si solo un fabricante frabrica la mayor cantidad de articulos. Ya recorde como me sugirieron que lo resuelva durante la cursada, si no recuerdo mal, seria asi:

Código:
select codF from ARTICULOS group by codF having count(*) >= ALL (select count(*) from ARTICULOS group by codf);


EDIT: Probado B-)
EDIT 2: No me avive de que Loonatic habia puesto lo mismo, disculpas

_________________
Foros-FIUBA o muerte

Piscis Género:Femenino Gallo OfflineGalería Personal de SorLaliVer perfil de usuarioEnviar mensaje privado
loonatic
Nivel 9


Edad: 32
Registrado: 16 May 2009
Mensajes: 1256

Carrera: Sistemas
CARRERA.sistemas.3.jpg
MensajePublicado: Mie Jun 03, 2015 9:40 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

SorLali escribió:
En el parcial, para un ejercicio parecido se me ocurrio lo siguiente:

Código:
select codF, count(*) from ARTICULOS group by codF order by count(*) desc limit 1;


Recuerdo que me levante a preguntar si limit esta permitido (no recuerdo si es estandar) aunque no recuerdo que me contestaron X-D


Estoy casi segura de que no está permitido.


Geminis Género:Femenino Cabra OfflineGalería Personal de loonaticVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Dom Jun 07, 2015 7:38 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Si si, definitivamente lo correcto es lo que puso loonatic.

El primero codigo que puso karajero no me muestra lo que queria y el 2do no esta permitido usar subconsultas dentro de un FROM (segun dijieron en clase)


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Dom Jun 07, 2015 7:40 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

PD (para SorLali): el limit no aparece en la hojita que da la catedra de "comandos permitidos" asi que no creo que pueda usarse


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
calet
Nivel 3


Edad: 23
Registrado: 21 Ago 2007
Mensajes: 57
Ubicación: Santos Lugares
Carrera: Informática
bahamas.gif
MensajePublicado: Lun Jul 04, 2016 1:34 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Buenas, tengo dudas sobre que se recomienda usar en las consultas de SQL, mas que nada para saber si prefieren mas simplicidad o performance.
Y tambien si hay cosas que esten prohibidas, como las sub queries en el from.

Por ejemplo, entre estas 2 consultas, cual seria preferible (suponiendo que no manquie y ambas hacen lo mismo)

Código:
select distinct A.ENombre
from Empleado A, Certificado B, Aeronave C
where A.EId = B.EId
and C.AId = B.AId
and C.Rango > 5000
and not exists (
                select *
                from Aeronave D
                where D.AId = B.AId
                and D.ANombre = "BOEING"));

select distinct A.ENombre
from Empleado
where exists (
        select *
        from Certificado B
        where A.EId = B.EId
        and exists (
                select *
                from Aeronave C
                where C.AId = B.AId
                and C.Rango > 5000)
        and not exists (
                select *
                from Aeronave D
                where D.AId = B.AId
                and D.ANombre = "BOEING"));


Libra Género:Masculino Dragón OfflineGalería Personal de caletVer perfil de usuarioEnviar mensaje privadoMSN Messenger
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.3461s ][ Pedidos: 20 (0.2438s) ]