|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |
Member
Iscritto dal: Nov 2006
Messaggi: 71
|
[Basi di Dati] Esercizi d'esame!
Mmh, ho appena visto che c'è un therad molto simile al mio in prima pagina, però non vorrei hijackarlo chiedendo li, qualche moderatore potrebbe dirmi se faccio bene ad aprirne un altro
![]() Comunque, sto preparando l'esame di BDA, e ogni tanto mi impantano in qualche query. Ho per esempio queste relazioni Codice:
SQUADRE(IdSq, Nome, Città) PARTITE(IdPartita, Data, Campionato, IdSqCasa, IdSqOspite, GolSqCasa, GolSqOspite) Quote:
Codice:
SELECT nome, sum(GolSqCasa) FROM Squadre S join Partite P on S.IdSq = P.IdSqCasa WHERE data like '%1980" GROPU BY IdSqCasa HAVING sum(GolSqOspite) < 20 and sum(GolSqCasa) > 40 ![]() |
|
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Quote:
Il numero di partite e' il numero di record della tabella Partite
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Nov 2006
Messaggi: 71
|
Mmh, ottimo spunto di riflessione! Vediamo: a me interessano i record (ossia le righe) che rispettino quei due parametri riguardanti i gol, ma allo stesso tempo che rispettino anche il vincolo sul numero di partite, mettiamola così. Il numero di record lo trovo con count(*), giusto?
Codice:
SELECT nome, sum(GolSqCasa) FROM Squadre S join Partite P on S.IdSq = P.IdSqCasa WHERE data like '%1980" GROUP BY IdSqCasa HAVING sum(GolSqOspite) < 20 and sum(GolSqCasa) > 40 and count(*) >= 13 |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Giusto!
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Nov 2006
Messaggi: 71
|
ottimo! grazie gugo, ora procedo e se mi incastro vengo a chiedere
![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Quote:
Da SQL Standard, a fronte di una GROUP BY, puoi selezionare solo le colonne per cui hai fatto GROUP BY (piu' una serie di altre possibilita' che trovi qui http://www.hwupgrade.it/forum/showthread.php?t=1906542) al che non puoi selezionare nome se raggruppi per IdSqCasa Fatto salvo che i nomi delle squadre siano tutti diversi (che e' normale, ma che dovrebbe essere rinforzato da un Constraint di univocita' sulla colonna), puoi raggruppare direttamente per nome. PS: MySql, che non e' standard, permette una scrittura come quella da te esposta, ma motori piu' seri l'avrebbero rifiutata.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 16-01-2009 alle 15:08. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:50.