PDA

View Full Version : [SQL] problema su query


ndakota
08-05-2009, 11:45
ho queste tre tabelle


CREATE TABLE atleti
(
id INT AUTO_INCREMENT,
cognome VARCHAR(20) NOT NULL,
nome VARCHAR(20) NOT NULL,
istituto VARCHAR(30) NOT NULL,
nazionalita VARCHAR(20) NOT NULL,
squadra VARCHAR(20) DEFAULT NULL,
PRIMARY KEY(id)
)

CREATE TABLE gare
(
id INT AUTO_INCREMENT,
fase ENUM('scolastica', 'regionale', 'nazionale', 'internazionale') NOT NULL,
sede VARCHAR(30) NOT NULL,
PRIMARY KEY(id)
)

CREATE TABLE risultati
(
id_gara INT NOT NULL,
id_atleta INT NOT NULL,
punteggio INT NOT NULL,
FOREIGN KEY(id_gara) REFERENCES gare(id),
FOREIGN KEY(id_atleta) REFERENCES atleti(id),
PRIMARY KEY(id_gara, id_atleta)
)


sempre che io non abbia sbagliato la progettazione..

ho una query che mi chiede:
stampare l'elenco degli atleti raggruppati per squadre per ogni singola fase

io la query l'ho fatta così

SELECT nome, cognome, squadra, fase
FROM atleti, gare, risultati
WHERE atleti.id=risultati.id_atleta AND gare.id=risultati.id_gara
GROUP BY fase


ma ho risultati sbagliati :(

ndakota
08-05-2009, 11:56
risolto sono un babbazzo

gugoXX
08-05-2009, 11:58
...cut...
ma ho risultati sbagliati :(

Se non hai da fare un conteggio di qualcosa (Conteggio di persone, di pezzi, somme di importi, etc.), ovvero se non hai da applicare nessuna funzione di gruppo, la clausola GROUP BY non e' da usare nella tua query.
Forse perche' sei stato tratto in inganno dalla richiesta in italiano con la parola "raggruppati".
Ma penso che la richiesta sia in realta' da riformularsi correttamente con la parola "ordinati". Prova a pensare come se la domanda fosse "ordinati" e ritenta...

ndakota
08-05-2009, 11:59
ti ringrazio, infatti l'ho proprio letta senza pensare.. l'ho riletta più attentamente ed infatti dà risultati giusti così:


SELECT nome, cognome, squadra, fase
FROM atleti, gare, risultati
WHERE atleti.id = risultati.id_atleta
AND gare.id = risultati.id_gara
ORDER BY squadra

ndakota
08-05-2009, 12:22
altra query:

stampare una scheda informativa(cognome, nome, istituto, nazionalità) del vincitore e della squadra vincitrice.

lasciando perdere la squadra vincitrice perchè così come lo fatto io è forse impossibile tirarla fuori ma per il vincitore ho problemi sempre sul raggruppamento, faccio così:


SELECT nome, cognome, istituto, nazionalita, max(punteggio) AS punteggio_piu_alto
FROM atleti, gare, risultati
WHERE fase = 'internazionale'
AND atleti.id = risultati.id_atleta
AND gare.id = risultati.id_gara
GROUP BY punteggio


ma mi da DUE righe(che poi sono tutte le righe che hanno fase= internazionale XD) .. perchèèèèè??

ndakota
08-05-2009, 13:25
risolto anche questo.. scusate, mannaggia a me che facico le cose all'ultimo momento :muro: :muro:

marko.fatto
08-05-2009, 13:32
stai facendo i vecchi esami di maturità di informatica vero? :asd:

ndakota
08-05-2009, 13:50
stai facendo i vecchi esami di maturità di informatica vero? :asd:

si :fagiano: questo è quello dell'anno scorso :p

marko.fatto
08-05-2009, 14:02
si :fagiano: questo è quello dell'anno scorso :p

si si, a noi il prof ce l'ha dato come simulazione d'esame anche se con un paio di query in più..