Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

aiuto sql

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

aiuto sql

Messaggioda steso » dom lug 04, 2004 3:43 pm

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?
Avatar utente
steso
Aficionado
Aficionado
 
Messaggi: 41
Iscritto il: lun feb 02, 2004 11:45 am

Messaggioda Ices_Eyes » dom lug 04, 2004 4:11 pm

Sinceramente, pensandoci, non so se la cosa sia possibile, così come hai strutturato il database...

Ciao [?]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda steso » dom lug 04, 2004 4:47 pm

perche?
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.
Avatar utente
steso
Aficionado
Aficionado
 
Messaggi: 41
Iscritto il: lun feb 02, 2004 11:45 am


Messaggioda Xerex » dom lug 04, 2004 5:07 pm

Ci provo senza riprove(nel senso che non ho modo di testarlo)

SELECT GP.id , P.nome, sum(R.tempo) as totale
FROM PILOTI as P join RISULTATI AS R on P.id = R.fk_piloti join GRANPREMI as GP on GP.ID = fk_piloti
GROUP BY GP.id, P.nome


[:I]è probabile che abbia scritto delle vaccate[:I]
...fammi sapere
Avatar utente
Xerex
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5948
Iscritto il: lun ago 05, 2002 9:36 am
Località: Parma(Pr)

Messaggioda steso » dom lug 04, 2004 5:17 pm

no perche 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.
Avatar utente
steso
Aficionado
Aficionado
 
Messaggi: 41
Iscritto il: lun feb 02, 2004 11:45 am

Messaggioda Ices_Eyes » dom lug 04, 2004 5:29 pm

Prova così:
<font face="Courier New">
CREATE VIEW TempiGara(pilota, gara, tempo) AS
SELECT fk_piloti, fk_gp, SUM(Tempo)
FROM Risultati
GROUP BY fk_piloti, fk_gp

SELECT tg.pilota, g.nome, tg.tempo
FROM TempiGara tg, GranPremio g
WHERE g.ID = tg.gara AND tg.tempo IN(
SELECT MIN(tempo)
FROM TempiGara
GROUP BY gara
</font id="Courier New">

Non so cosa venga fuori... [?]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda steso » dom lug 04, 2004 5:47 pm

L'idea è buona ma secondo te non si riesce a fare il tutto con una sola query e senza viste?
Avatar utente
steso
Aficionado
Aficionado
 
Messaggi: 41
Iscritto il: lun feb 02, 2004 11:45 am

Messaggioda Ices_Eyes » dom lug 04, 2004 5:50 pm

Dubito, le cose da mettere assieme e calcolare sono troppe...Servirebbe un bel FOR.... [:D]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda steso » dom lug 04, 2004 5:54 pm

Io ho provato ad usare l'having ma c'è qualcosa che non mi quadra perche il risltato non viene
Avatar utente
steso
Aficionado
Aficionado
 
Messaggi: 41
Iscritto il: lun feb 02, 2004 11:45 am

Messaggioda Ices_Eyes » dom lug 04, 2004 6:02 pm

L'having impone solo delle condizione sui raggruppamenti, non mi pare possa tornare utile la cosa... [?]
Quella che ti ho scritto funziona? (più per curiosità che per altro... [:D])
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda steso » dom lug 04, 2004 7:02 pm

Si funziona.Grazie mille
Avatar utente
steso
Aficionado
Aficionado
 
Messaggi: 41
Iscritto il: lun feb 02, 2004 11:45 am

Messaggioda steso » lun lug 05, 2004 2:48 pm

Mi potresti spiegare come funzionano quelle 2 query...mi perdo da qualche parte!!! Cioe non riesco a capire l'ultima parte dove dici gp.id=z.fk_gp
Avatar utente
steso
Aficionado
Aficionado
 
Messaggi: 41
Iscritto il: lun feb 02, 2004 11:45 am

Messaggioda Ices_Eyes » lun lug 05, 2004 7:38 pm

Allora...La view crea una tabella in cui ad ogni pilota è associato il tempo che ha impiegato in ciascuna gara...La seconda prende tutti i piloti che in ciascuna gara hanno temp minore, ex equi compresi...
La g.ID = tg.gara serve per unire la tabella granpremio, da cui prendere il nome del gran premio (altrimenti avresti la chiave), con la tabella creata prima in cui per ogni gara hai il suo id e non il suo nome...
Spero sia chiara ora...

Ciao [^]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising