Oppure

Loading
16/12/11 17:47
killer
Salve a tutti..ho un problema gravissimo che non riesco a capire..

Modello logico:
Studenti(CodiceStudente, Cognome, Nome, Sesso)
Voti (ID, DataVerifica, Voto, CodiceStudente)

Provo a fare questa query:
Si vuole l'elenco dei voti per ciascuno studente ordinato per DataVerifica crescente

SELECT DataVerifica, Studenti.*, Voto
FROM Voti JOIN Studenti USING(CodiceStudente)
GROUP BY CodiceStudente
ORDER BY DataVerifica;

perke la visualizzazione è scorretta ?mi visualizza

DataVerifica | CodiceStudente |Nome | Cognome | Sesso | Voto
2010-09-27 5 w y M 7
2010-02-07 2 z K F 8
2011-02-01 7 j i F 4
2010-09-03 3 O P M 2

Perke non mi visualizza i voti per ciascuno studente?Cosa sbaglio e cosa dovrei correggere ?.. aiutatemi vi supplico...un grazie anticipatamente
Ultima modifica effettuata da killer 16/12/11 18:29
aaa
16/12/11 18:01
Perchè dici che non mostra i voti? I voti ci sono nell'output ...

Quale output ti aspetti?
16/12/11 18:26
killer
L'output che dovrei aspettarmi è questo:
DataVerifica | CodiceStudente |Nome | Cognome | Sesso | Voto
2010-09-27 1 x xx M 7
2010-02-07 1 x xx M 8
2011-02-01 1 x xx M 4
2010-09-03 1 x xx M 2
2010-09-27 6 GG GG F 4
2010-02-07 6 GG GG F 4
2011-02-01 6 GG GG F 9
2010-09-03 6 GG GG F 3

Capisci? cioè per ogni studente mi deve dare l'elenco dei voti...

quindi riassumendo lo studente con codice '1' ha '4' voti (7,8,4,2) in date ....
e lo studente con codice '6' ha anche esso '4' voti(4,4,9,3)
Ultima modifica effettuata da killer 16/12/11 18:33
aaa
16/12/11 18:56
Probabilmente ti basta qualcosa del genere

SELECT Voti.DataVerifica, Studenti.*, Voti.Voto
FROM Studenti JOIN Voti USING(CodiceStudente)
ORDER BY Studenti.CodiceStudente, DataVerifica
16/12/11 19:16
killer
uhm...esatto funziona alla perferzione pero voglio capire questo concetto...kome mai in qst caso la group by non funziona ? :( sn disperato non riesco a capire riusciresti a spiegarmi? grazie ancora
aaa
16/12/11 19:30
Non è che "non funziona" ma "non ti serve" la GROUP BY ...
16/12/11 19:33
killer
si vabbe fino qua ci sono...ma non capisco il motivo per cui non serve la group by !! di solito non si usa la group by per i raggruppamenti !? e di regola in questo caso io sto facendo un raggruppamento......adesso che ci penso con questa query io visualizzo i codicestudente ordinati.. ma non devono essere ordinati..
la traccia mi chiede di eseguire un ordinamento solo per Data non per CodiceStudente
Ultima modifica effettuata da killer 16/12/11 19:36
aaa
18/12/11 10:52
Il Totem
Vorrei farti notare che la tua query viola una regola dello standard secondo cui, in presenza di clausole GroupBy, l'insieme degli attributi di Select deve essere un sottoinsieme di quelli usati per il raggruppamento, più eventualmente altri aggregati sugli stessi attributi.

Questo vincolo esprime la proprietà che in un gruppo non possono esserci campi di valore ambiguo. Infatti, una volta eseguita la GroupBy, ogni gruppo è come se fosse un unico record, perciò non può contenere più valori diversi nello stesso campo. Un gruppo non è l'insieme di più record: questa è un'astrazione usata solo in fase di calcolo del gruppo.

Ad esempio, volendo raggruppare secondo A:
A   B   C
1   2   3
1   7   8
2   5   3

Non puoi selezionare A e B nella select, poiché il primo raggruppamento sarebbe ambiguo:
(1, 2 o 7?)
(2, 5)

Tuttavia puoi selezionare Sum(B), poiché il valore dell'aggregato è unico:
(1, 9)
(2, 5)
aaa