Ver Mensaje Individual
  #18 (permalink)  
Antiguo 16/11/2013, 09:54
ellandax
 
Fecha de Ingreso: noviembre-2013
Mensajes: 16
Antigüedad: 11 años
Puntos: 0
Respuesta: 3 puntos de algebra relacional,consultas,having

Cita:
Iniciado por jurena Ver Mensaje
ellandax,
vamos con el primer ejercicio y ve despacio:

Pasos para preparar la consulta.
1) averiguar la matrícula de los vehículos que han sufrido más de dos accidentes y para ello solo te hace falta la tabla accidentes_vehiculos. Agrupas por matrícula y te traes las matrículas que han sufrido más de dos accidentes.
Código MySQL:
Ver original
  1. SELECT matricula
  2.  FROM accidentes_vehiculos
  3.    GROUP BY matricula
  4.     HAVING COUNT(*) > 2
2) traerte después los datos de todos esos vehiculos mediante un inner join con la tabla vehiculo relacionando por el campo matrícula (consulta y subconsulta). Hay que usar alias para la consulta sobre accidentes, lo que te permitirá relacionarla mediante INNER JOIN con la tabla vehiculo.
Código MySQL:
Ver original
  1. SELECT v.* FROM vehiculo v INNER JOIN
  2.    (SELECT matricula
  3.         FROM accidentes_vehiculos
  4.           GROUP BY matricula
  5.             HAVING COUNT(*) > 2)t1
  6. ON v.matricula = t1.matricula

Prueba y dinos si funciona; analiza cada consulta fijándote en qué buscas y en qué tabla puedes encontrar los datos relevantes para la misma, qué debes buscar primero y cómo, y poseriormente cómo traerte lo demás. Hazte primero esas preguntas.
Responde al segundo ejercicio por partes, preocupándote de lo que es más relevante para ello y dónde está.
Por cierto, revisa la redacción de las preguntas, pues esto

está mal, falta otra fecha para establecer el rango.
Sobre el promedio, busca la función de agregación pertinente, que la hay.
Y un consejo de alguien algo ajeno a este mundo como yo: prueba parte por parte para comprobar que los datos devueltos son los esperados en cada una de ellas.
gracias :D
Asi como esta este codigo esta bien?

Código MySQL:
Ver original
  1. SELECT * FROM total_accidentes_veiculos tav WHERE tav.total > 2;
  2.  
  3. SELECT * FROM total_accidentes_personas tap WHERE tap.total > 2 AND tap.fecha > 2000-01-01;
  4.  
  5. SELECT * FROM promedio_multas pm WHERE pm.promedio > 200000;
  6.  
  7.  
  8. CREATE VIEW total_accidentes_veiculos AS
  9.     SELECT
  10.         v.*,
  11.         COUNT(av.matricula) as total
  12.     FROM veiculo v
  13.     LEFT JOIN accidentes_vehiculos av ON v.matricula = av.matricula
  14.     LEFT JOIN accidente a ON av.codigo = a.codigo GROUP BY v.matricula;
  15.  
  16. CREATE VIEW total_accidentes_personas AS
  17.     SELECT
  18.         p.*,
  19.         COUNT(ap.dni) AS total,
  20.         a.*
  21.     FROM persona p
  22.     LEFT JOIN  accidentes_persona ap ON ap.dni =  p.dni
  23.     LEFT JOIN accidentes a ON a.codigo = ap.codigo GROUP BY p.dni;
  24.  
  25. CREATE VIEW promedio_multas AS
  26.     SELECT
  27.         v.*,
  28.         SUM(m.importe)/COUNT(m.importe) as promedio
  29.     FROM veiculo v
  30.     LEFT JOIN multas m ON m.matricula = v.matricula GROUP BY v.matricula;
[/CODE]

Última edición por gnzsoloyo; 16/11/2013 a las 10:34