Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.
da Rumez » gio dic 07, 2006 1:21 pm
Ciao ho un problema che mi affligge con una select nel mio sito del Fantacalcio. Per la cronaca si tratta della Select che ritorna i 5 migliori attaccanti del torneo ordinati per media voto.
Il calcolo che viene eseguito è il punteggio totale realizzato dal calciatore diviso il numero di giornate giocate dal calciatore. ( punteggio / num_giornate )
Il punteggio e il numero giornate vengono calcolati con delle sotto select
Il problema avviene quando eseguo la divisione..mi spiego meglio con del codice:
- Codice: Seleziona tutto
SELECT
calciatore.id_calciatore as id,
calciatore.nome,
calciatore.cognome,
(select distinct count(formazione.id_giornata)
from
formazione
where
formazione.id_campionato = 1
and formazione.id_calciatore = id
and formazione.punteggio is not null) as n_giornate,
sum(formazione.punteggio) as punteggio,
( punteggio / n_giornate ) as media_voto
FROM
calciatore
LEFT OUTER JOIN formazione
ON formazione.id_calciatore = calciatore.id_calciatore
WHERE
formazione.id_campionato= 1
and calciatore.ruolo = 'A'
GROUP BY formazione.id_campionato,formazione.id_calciatore
ORDER BY media_voto DESC, cognome ASC
LIMIT 5
eseguendo questa query il compilatore mysql mi genera questo errore:
- Codice: Seleziona tutto
Unwknown column 'n_giornate' in 'field_list'
boh...non ho idea del motivo visto che la colonna è presente..
Visto che non ne uscivo ho trasformato la query in questo modo:
- Codice: Seleziona tutto
SELECT
calciatore.id_calciatore as id,
calciatore.nome,
calciatore.cognome,
sum(formazione.punteggio) as punteggio,
( punteggio / (select distinct count(formazione.id_giornata)
from
formazione
where
formazione.id_campionato = 1
and formazione.id_calciatore = id
and formazione.punteggio is not null) ) as media_voto
FROM
calciatore
LEFT OUTER JOIN formazione
ON formazione.id_calciatore = calciatore.id_calciatore
WHERE
formazione.id_campionato= 1
and calciatore.ruolo = 'A'
GROUP BY formazione.id_campionato,formazione.id_calciatore
ORDER BY media_voto DESC, cognome ASC
LIMIT 5
In questo modo il numero di giornate viene calcolato direttamente al momendo dellla divisione..
Ora la query funziona ma la divisione (operatore "/") mi ritorna risultati sbagliatissimi.
Avete qualche consiglio?
-

Rumez
- Membro Ufficiale (Gold)

-
- Messaggi: 1783
- Iscritto il: mar mag 13, 2003 2:08 pm
da Rumez » gio dic 07, 2006 5:20 pm
Risolto...
-

Rumez
- Membro Ufficiale (Gold)

-
- Messaggi: 1783
- Iscritto il: mar mag 13, 2003 2:08 pm
da Rumez » gio dic 07, 2006 8:38 pm
praticamente invece di calcolare i due campi (punteggio, num_giornate) separatamente e poi fare la divisione...ho messo direttamente le due sottoselect come argomenti dell'operazione..
magia..e tutto funziona..
per la cronaca..
- Codice: Seleziona tutto
SELECT
calciatore.id_calciatore as id,
calciatore.nome,
calciatore.cognome,
(select distinct count(formazione.id_giornata)
from
formazione
where
formazione.id_campionato = 1
and formazione.id_calciatore = id
and formazione.punteggio is not null) as n_giornate,
round( ( sum(formazione.punteggio) / (select distinct count(formazione.id_giornata)
from
formazione
where
formazione.id_campionato = 1
and formazione.id_calciatore = id
and formazione.punteggio is not null) ), 2 ) as media_voto
FROM
calciatore
LEFT OUTER JOIN formazione
ON formazione.id_calciatore = calciatore.id_calciatore
WHERE
formazione.id_campionato= 1
and calciatore.ruolo = 'D'
GROUP BY formazione.id_campionato,formazione.id_calciatore
HAVING n_giornate > 5
ORDER BY media_voto DESC, cognome ASC
LIMIT 5
per l'anno prossimo vi suggerirò anche l'indirizzo del sito...visto che ha bisogno di un po' di test..
-

Rumez
- Membro Ufficiale (Gold)

-
- Messaggi: 1783
- Iscritto il: mar mag 13, 2003 2:08 pm
Torna a Programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 2 ospiti