Header

lunes, 18 de junio de 2007

Consultas

Ya llegamos al final del trabajo sólo no resta el código de las consultas y las pijadas de la maquetación que, para variar, dejaré en manos de Latex JEJEJE ¡Ohhh, poderoso amigo latex, trabaja tú por mi!

Pero antes las consultas, no están en un orden determinado ni nada por el estilo. Simplemente se exponen según se me fueron ocurriendo.

  1. Saber en que escudería ha estado un piloto, por ejemplo Alonso.

SELECT I_TIENEN_2.esc_nombre AS "Escuderias"
FROM I_TIENEN_2
WHERE (I_TIENEN_2.pil_apellido= 'Alonso')

  1. Saber cuantas veces ha quedado un piloto en primer puesto junto con la fecha del GP su temporada y en que circuitos. Por ejemplo Felipe Massa.

SELECT I_POSICION.pil_apellido AS "Apellido", I_POSICION.pil_nombre AS "Nombre", I_POSICION. fecha_mundial AS "Fecha en el MUNDIAL", GPs.temporada AS "Temporada", I_POSICION.gp_nombre AS "Posicion"
FROM I_POSICION, GPs
WHERE (I_POSICION.llegada='1' AND I_POSICION.pil_apellido='Massa'AND GPs.fecha_mundial=I_POSICION.fecha_mundial)

  1. Listar que pilotos han ganado los GP´s en esta temporada (2007)

SELECT I_POSICION.pil_apellido AS "Apellido", I_POSICION.pil_nombre AS "Nombre"
FROM I_POSICION
WHERE I_POSICION.llegada='1'
AND (SELECT EXTRACT(YEAR FROM I_POSICION.fecha_mundial))='2007'
GROUP BY pil_apellido, pil_nombre

  1. ¿Qué pilotos Oficiales han nacido antes de 1980? Es decir que pilotos en activo y oficiales tienen más de 27 años.

SELECT pilotos.apellido AS "Apellido", pilotos.nombre AS "Nombre"
FROM pilotos
WHERE (SELECT EXTRACT(YEAR FROM pilotos.nacimiento))<='1980' AND pilotos.estatus= 'O'

  1. ¿Cuántas veces se ha corrido en Indianápolis, en qué fecha y temporada?

Esta me da el número de veces que se ha corrido en el circuito
SELECT COUNT(*) AS "Numero de carreras en circuito solicitado"
FROM gps
WHERE gps.cir_nombre= 'Indianapolis'
Y esta me da las fechas y las temporadas

SELECT gps.fecha_mundial AS "Fecha en el Mundial", temporada AS "Temporada"
FROM gps
WHERE gps.cir_nombre= 'Indianapolis'
ORDER BY "Temporada" ASC
6. ¿Qué curvas del mundial se toman a más de 250 km/h?

SELECT cir_nombre AS "Circuito",n_curva AS "Numero de curva", nombre_propio AS "Nombre propio"
FROM curvas
WHERE curvas.velocidad > '250'
ORDER BY cir_nombre ASC

7. ¿Qué circuito es el más rápido del mundial 2007? ¿A que velocidad se corre en el como máximo?

SELECT trazado.cir_nombre AS "Nombre",trazado.velocidad_max AS "Velocidad Maxima (km/h)"
FROM trazado
WHERE (trazado.temporada='2007' OR trazado.temporada='06/07')
AND (trazado.velocidad_max = (SELECT MAX(trazado.velocidad_max) FROM trazado))

8. Longitud de cada carrera en esta temporada junto al número de vueltas y longitud de cada una.


SELECT trazado.cir_nombre, trazado.n_vueltas, trazado.longitud AS "Longitud Vuelta (m)", ((trazado.longitud * trazado.n_vueltas)/1000)::NUMERIC(6,3) AS "Longitud GP (km)", trazado.temporada
FROM trazado;
NOTA: Notar que en esta consulta se hace un cambio de unidades.

9. Mundial de pilotos en esta temporada.

--Creación de la Vista

CREATE VIEW auxiliar_clasificacion AS
SELECT pil_apellido,pil_nombre,llegada,
CASE WHEN llegada=1 THEN 10
WHEN llegada=2 THEN 8
WHEN llegada=3 THEN 6
WHEN llegada=4 THEN 5
WHEN llegada=5 THEN 4
WHEN llegada=6 THEN 3
WHEN llegada=7 THEN 2
WHEN llegada=8 THEN 1
ELSE 0
END AS "puntuacion",gp_nombre
FROM i_posicion
WHERE (SELECT EXTRACT(YEAR FROM I_POSICION.fecha_mundial))='2007'
ORDER BY pil_apellido, pil_nombre;

--Código de la consulta

SELECT pil_nombre,pil_apellido, SUM(puntuacion) AS "Puntos del Campeonato"
FROM auxiliar_clasificacion
GROUP BY pil_apellido, pil_nombre
ORDER BY "Puntos del Campeonato" DESC

10. Mundial de Escuderías en esta temporada.

--Creación de la Vista

CREATE VIEW aux_esc_clasificacion3 AS
SELECT esc_nombre, pil_apellido, pil_nombre, auxiliar_clasificacion.puntuacion
FROM I_TIENEN_2
WHERE (I_TIENEN_2.pil_nombre= auxiliar_clasificacion.pil_nombre) AND
(I_TIENEN_2.pil_apellido = auxiliar_clasificacion.pil_apellido);

--Código de la consulta

SELECT esc_nombre, SUM (puntuacion) AS "Puntos del Campeonato"
FROM aux_esc_clasificacion3
GROUP BY esc_nombre
ORDER BY "Puntos del Campeonato" DESC

11. ¿Qué circuito posee más aforo de este mundial? ¿y el más pequeño a que GP pertenece?

SELECT circuitos.cir_nombre AS "Circuito",circuitos.aforo AS "Aforo"
FROM circuitos
WHERE circuitos.aforo=(SELECT MAX(circuitos.aforo)FROM circuitos)

SELECT circuitos.cir_nombre, circuitos.aforo
FROM circuitos
WHERE circuitos.aforo=(SELECT MIN(circuitos.aforo)FROM circuitos)

12. Cuántas veces ha tenido la pole un piloto determinado? xe: Hamilton.

SELECT pil_apellido AS "Piloto", COUNT(*) AS "Poles"
FROM I_POSICION
WHERE (parrilla = '1') AND (pil_apellido= 'Hamilton')
GROUP BY pil_apellido, pil_nombre --Esto es necesario según indica el SGBD
13. ¿Qué monoplaza es el más corto de la temporada? ¿Y el de mayor batalla?

SELECT mono_nombre AS "Monoplaza", (longitud/1000)::NUMERIC(5,1) AS "Longitud (m)"
FROM monoplazas
WHERE longitud=(SELECT MIN(longitud)FROM monoplazas)SELECT mono_nombre AS "Monoplaza", (batalla/1000)::NUMERIC(5,3) AS "Batalla (m)"
FROM monoplazas
WHERE batalla=(SELECT MAX(batalla)FROM monoplazas)

14. ¿A quién patrocina ING?

SELECT esc_nombre
FROM I_TIENEN_3
WHERE patro_nombre=’ING’

15. Buscar un patrocinador del cual no recordamos bien como escribir su nombre. xe: Bridgestone supongamos que sabemos que empieza por “Bri” que tiene alguna “g” y que termina por “e”

SELECT patro_nombre AS "Patrocinador"
FROM I_TIENEN_3
WHERE patro_nombre LIKE 'Bri%g%e'
GROUP BY patro_nombre

16. Listar los patrocinadores que empiecen por “C” y que contengan alguna “e” en su nombre, además no deben repetirse nombres y estar ordenados alfabéticamente.

SELECT patro_nombre AS "Patrocinarores"
FROM I_TIENEN_3
WHERE patro_nombre LIKE 'C%e%'
GROUP BY patro_nombre
ORDER BY patro_nombre ASC

17. ¿En qué circuito se consume más combustible?

SELECT cir_nombre, consumo AS "consumo (kg/vuelta)", consumo*n_vueltas AS "Consumo estimado en el GP (kg)", '1 kg = 1 litro'::VARCHAR (10)AS "NOTA"
FROM trazado
WHERE consumo= (SELECT MAX(consumo)FROM trazado )

18. Crear una consulta donde podamos comparar la media de clasificación y llegadas de los pilotos para ver quienes clasifican mejor y contrastarlos con su posición tras el GP. Es decir una tabla de rendimientos de los pilotos en clasificación y en carrera.

--Creación de la Vista

CREATE VIEW auxiliar_media AS
SELECT pil_apellido,pil_nombre,parrilla, llegada
FROM i_posicion
WHERE (SELECT EXTRACT(YEAR FROM I_POSICION.fecha_mundial))='2007'
ORDER BY pil_apellido, pil_nombre;

--Creación de la consulta

SELECT pil_apellido AS "Apellido", pil_nombre AS "Nombre", AVG(parrilla)::NUMERIC(3,0) AS "Media en Parrilla", AVG(llegada)::NUMERIC(3,0) AS "Media de Llegada"
FROM auxiliar_media
GROUP BY pil_apellido, pil_nombre
ORDER BY AVG(parrilla) ASC

0 comentarios: