Consulta TP6 ejer 2.5 SQL

20 views
Skip to first unread message

Alcides Rosano

unread,
Jun 1, 2016, 9:18:53 AM6/1/16
to gdatos
Hola, quería saber si esta bien abordado el problema, y si es valida esta resolución.

5. Determinar el nombre de la localidad en la que se hayan cometido más infracciones por mal
estacionamiento durante 1999. Si el primer puesto es compartido por más de una localidad se debe
listar el nombre de todas ellas.

create view cantidadInfraccion as
select i.codpostal,l.localidad,count(*) as cantInfraccion
from infraccion i, localidad l
where i.codpostal=l.codpostal
and i.tipoinfraccion=1
and i.fecha between '1979-01-01' and '1999-12-31'
group by i.codpostal, l.localidad

select localidad
from cantidadInfraccion 
where cantInfraccion = (select max(cantInfraccion) from cantidadInfraccion)

Gracias, saludos.

Paula Zabalegui

unread,
Jun 1, 2016, 9:37:28 AM6/1/16
to gda...@googlegroups.com
Hola Alcides,

Sí está bien resuelto el ejercicio. 

Yo optaría por no aplicar filtros de fecha en la vista, para que ésta quede más genérica y sirva para resolver mayor cantidad de consultas. Incluiría por ejemplo un campo "mes" y un campo "año" en la vista, como parte de la agrupación y aplicaría el filtro en la consulta principal, con las agregaciones que correspondan.

Saludos

--
Has recibido este mensaje porque estás suscrito al grupo "gdatos" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a gdatos+un...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Alcides Rosano

unread,
Jun 1, 2016, 10:02:26 AM6/1/16
to gda...@googlegroups.com
Claro, igual ahora veo que en el filtro aplique desde el año 1979-01-01 y seria desde 1999-01-01,no? en la vista.
Usted dice algo así? 
create view cantidadInfraccion as
select i.codpostal,l.localidad,date_part('year',i.fecha) as anio,count(*) as cantInfraccion
from infraccion i, localidad l
where i.codpostal=l.codpostal
and i.tipoinfraccion=1
group by i.codpostal, l.localidad, i.fecha;

select localidad
from cantidadInfraccion 
where anio='1999' and cantInfraccion = (select max(cantInfraccion) from cantidadInfraccion)

Paula Zabalegui

unread,
Jun 1, 2016, 10:09:01 AM6/1/16
to gda...@googlegroups.com
Claro, pero en realidad la resolución correcta de la consulta principal sería:


select localidad
from cantidadInfraccion 
where anio='1999' and cantInfraccion = (select max(cantInfraccion) from cantidadInfraccion where anio = '1999')

Agustin Caire

unread,
Jun 1, 2016, 12:51:29 PM6/1/16
to gda...@googlegroups.com
Hola. Estaba mirando esta consulta y vi que falto cambiar la agrupacion solo por el año en el group by, porque sino esta quedan tuplas repetidas por haber infracciones en el mismo año pero distinto mes o dia.

Quedaria asi:


create view cantidadInfraccion as
select i.codpostal,l.localidad,date_part('year',i.fecha) as anio,count(*) as cantInfraccion
from infraccion i, localidad l
where i.codpostal=l.codpostal
and i.tipoinfraccion=1
group by i.codpostal, l.localidad, date_part('year',i.fecha);

Saludos.
Reply all
Reply to author
Forward
0 new messages