Salve,
ho l'esigenza di calcolare la media dei punteggi assegnati ad ogni entità di un database, rappresentata dallo stesso id. I punteggi, nelle colonne c1 c2 c3 e c4 possono essere inseriti varie volte, quindi bisogna calcolare la somma dei punteggi di ogni entità diviso 4 e successivamente diviso il numero delle volte presenti nel db.
Ho trovato la seguente query che sembra funzionare correttamente:
Il problema è che non capisco il funzionamento dell'istruzione if( c1 !=0, 1, 0 ), anche se penso sia usata per definire quante volte è presente il record con la stessa entità...Codice PHP:SELECT id, sum( c1 ) , sum( c2 ) , sum( c3 ) , sum( c4 ) , avg( (
c1 + c2 + c3 + c4
) / ( if( c1 !=0, 1, 0 ) + if( c2 !=0, 1, 0 ) + if( c3 !=0, 1, 0 ) + if( c2 !=0, 1, 0 ) ) ) AS media
FROM votazioni
GROUP BY id
Hop provato così a sostituire con una cosa simile:
ma ho l'errore: #1054 - Unknown column 'tot' in 'field list'Codice PHP:SELECT id, sum( c1 ) , sum( c2 ) , sum( c3 ) , sum( c4 ) , count(id) as tot, avg( (
c1 + c2 + c3 + c4
) / ( tot ) ) AS media
FROM votazioni
GROUP BY id
Quindi vorrei riuscire a capire il funzionamento di quella sintassi oppure sapere un modo alternativo per ottenere questo risultato....
Thx !!!
Risultati: id 2 media 2,5Codice PHP:CREATE TABLE `votazioni` (
`id` int(10) NOT NULL,
`c1` int(2) NOT NULL,
`c2` int(2) NOT NULL,
`c3` int(2) NOT NULL,
`c4` int(2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Dump dei dati per la tabella `votazioni`
--
INSERT INTO `votazioni` ( `id`, `c1`, `c2`, `c3`, `c4`)VALUES
( 2, 1, 2, 3, 4),
( 8, 2, 3, 4, 6),
( 6, 2, 1, 1, 2),
( 6, 1, 5, 4, 3);
id 6 media 2,37
id 8 media 3,75

Rispondi quotando
