PDA

View Full Version : [SQL] Gestione classifica


zanardi84
07-12-2012, 09:24
Ho questo schema in cui ho indicato con PK le chiavi primarie e con FK quelle esterne. Si riferisce ad un campionato di basket dove non esistono pareggi.

PARTITA(giornata PK, casa PK FK, ospiti, punti casa, punti ospite)
CLASSIFICA(giornata PK FK, squadra PK FK, punti, posizione)
SQUADRA (nome PK, città, stadio)

Devo scrivere un comando di aggiornamento dell'attributo posizione presupponendo che l'attributo punti rappresenti i punti ottenuti sino a quella giornata.

L'idea che ho elaborato parte dal presupposto che in ogni giornata tutte le partite siano state giocate (niente rinvii, sospensioni...).
Ottengo dalla mia query la classifica così composta.
giocate - squadra - punti

select count(*) as giocate, squadra, sum(totpunti) as punti
from classifica
group by squadra
order by punti desc

Il mio intento a questo punto è quello di associare l'ordinamento ottenuto dalla query con la posizione.. ma è possibile? E come si fa?

Grazie.

gugoXX
08-12-2012, 12:33
A seconda del motore SQL che stai usando puoi trovare risposte migliori, anche se non SQL92 standard.
Sfortunatamente le funzioni analitiche non sono ancora state standardizzate, anche se sono in giro sui motori DB piu' diffusi da parecchi anni.

Una risposta in SQL92 standard, anche se non e' efficiente, potrebbe essere:

Costruisco una Vista come da SELECT da te proposta


CREATE VIEW vs_punti AS
SELECT COUNT(*) AS giocate, squadra, SUM(totpunti) AS punti
FROM classifica
GROUP BY squadra


E su di questa posso operare costruendo la classifica


SELECT giocate, squadra, punti,
(SELECT COUNT(*) FROM vs_punti int WHERE int.punti<=ext.punti) AS classifica
FROM vs_punti ext


NB: Cosi' facendo squadre pari merito avranno la stessa posizione in classifica, e ci sara' un buco in classifica
Che forse e' anche corretto dal punto di vista logico.