PDA

Visualizza versione completa : aiuto sql


steso00
04-07-2004, 16.45.50
Ciao a tutti. Vi spiego il mio problema rivolto agli "esperti" di sql. Ho 3 tabelle (gran premi, piloti e risultati), nella tabella risultati ci sono le chiavi esterne delle altre 2 tabelle, il n° giro, tempo. Cioè nella tabella risultati sono elencati tutti i giri di tutti i piloti di tutti i gran premi. La query che devo fare è: elenco di tutti i vincitori di tutti i gp. Ovviamente il vincitore di ogni gran premio è quel pilota che ha la somma dei tempi riferiti a quel gran premio minore di tutti.
Spero di essere stato chiaro... Mi date una mano per favore?

nemesis
04-07-2004, 17.37.38
scusa mi metti le definizioni delle tabelle complete che ti aiuto non capisco bene i campi presenti in ogni tabella

steso00
04-07-2004, 17.45.29
allora tabella: GRANPREMI (ID(chiave primaria), lunghezza, n°giri da percorrere, nome)
PILOTI (ID (chiave primaria), nome, squadra)
RISULTATI (N° giro, tempo, fk_gp, fk_piloti)
Come ho detto nella tabella risultati ci sono tutti i giri di tutti i piloti di tutti i gran premi con i rispettivi tempi (es. giro:4, tempo: 150, fk_gp:2, fk_pilota:5)
Io voglio sapere i piloti vincitori di ciascun gran premio cioe quei piloti che per quel grn premio hanno la somma dei tempi piu bassa. Questo ovviamente per tutti i granpremi. Grazie per la tempestività

Dav82
04-07-2004, 17.53.02
Avrai quindi le tabelle fatte così:

GP (GPid [PK], Nazione, Data, Luogo)
Pilota (Nome[PK], Moto, Team, Nazione)
Risultati (Pilota[PK-FK], GP[PK-FK], Giro[PK], Tempo)

con PK = Primary Key, FK = Foreign key.

L'interrogazione SQL che ti serve è fatta così:



Create View Sommatempi as
SELECT Pilota, GP, sum (Tempo) as Finale
FROM Risultati
GROUP BY Pilota, GP

Create View Vincitore as
SELECT Pilota, GP, Finale
FROM Sommatempi as A
WHERE A.Finale <= ALL SELECT Finale
FROM Sommatempi as B
WHERE A.GP = B.GP

SELECT P.Nome, P.Moto, P.Team, P.Nazione, G.Nazione as GP, G.Luogo, G.Data
FROM (Vincitore as V join Pilota as P
on V.Pilota = P.Nome) join GP as G
on V.GP = G.Gpid
ORDER BY G.Data



Ho creato la View Vincitore per non mettere assieme questa view con la select finale, veniva fuori un po' troppo incasinata ;)


Edit: era "<=" e non "<", altrimenti non funzionava nulla!

steso00
04-07-2004, 17.59.59
No allora io devo prendere i dati solo sulla tabella risultati e devo elencare gli fk_piloti con a fianco il gran premio vinto. Sulla tabella risultati non ci sono solo i vincitore ci sono tutti i tempi di tutti i giri di tutti i piloti di tutti i granpremi. Quindi io devo sommare tutti i tempi di ogni singolo pilota e ogni singolo granpremio, poi prendere per ogni gran premio la somma tottale piu bassa (che sarebbe il vincitore del gran premio). questo per tutti i granpremi come ti ho detto. La data non c'è tutte le gare sono rifeite ad un anno

Dav82
04-07-2004, 18.01.41
Originariamente inviato da steso00
No allora io devo prendere i dati solo sulla tabella risultati e devo elencare gli fk_piloti con a fianco il gran premio vinto. Sulla tabella risultati non ci sono solo i vincitore ci sono tutti i tempi di tutti i giri di tutti i piloti di tutti i granpremi. Quindi io devo sommare tutti i tempi di ogni singolo pilota e ogni singolo granpremio, poi prendere per ogni gran premio la somma tottale piu bassa (che sarebbe il vincitore del gran premio). questo per tutti i granpremi come ti ho detto

Quello che ho scritto sopra, appunto ;)

Dav82
04-07-2004, 18.03.19
Se vuoi te lo riscrivo con i campi esatti che hai nelle tue tabelle, ma il concetto è quello :)

steso00
04-07-2004, 18.08.08
si ma lo devo fare con tre query? e poi la data non c'è io voglio solo fk_pilota con a fianco l'fk_gp vinto

steso00
04-07-2004, 18.09.53
Io dovrei farle girare su access e quindi le view non sono accettate dal sig.bill.

steso00
04-07-2004, 18.28.49
non si riesce a fare con una sola query vero? Io potrei farlo anche con piu query pero non con le viste. Cosa mi dici?