Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Media campi non vuoti con AVG

    Ciao,
    Domandina del giorno:
    devo fare una media di un campo dove metto delle votazioni, ma il risultado non mi convince. Mi stampa un 6,25 ma io ho 4 valori nel db che sommano 23; 23/4=5,75.
    Lo imposto cosí:

    $query = mysql_query("SELECT AVG(voto) AS media FROM voto_db WHERE (id='$user' AND voto>0)");
    $media = mysql_fetch_row($query);
    $media = number_format($media[0], 2, ",", ".");
    return $media;
    }

    Una idea?

    Byebye

  2. #2
    Qui sei nella classica situazione dove si deve valutare la differenza tra empty e NULL.

    Un campo empty (NOT NULL vuoto) viene calcolato e fa parte della media. Un campo NULL (NULL mai valorizzato) viene ignorato (inesistente) ai fini del conteggio quindi non fa parte della media calcolata.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Ciao Piero,
    Quindi ho marcato come NULL il campo.
    No so se é cosí pero non cambia il risultato.

  4. #4
    Originariamente inviato da gattofurbo
    Ciao Piero,
    Quindi ho marcato come NULL il campo.
    No so se é cosí pero non cambia il risultato.
    verifica che sia veramente NULL e non NULL ma empty. Diciamo che NULL e' un terzo stato rispetto a vuoto e valorizzato.

    Sei in questa condizione alla creazione oppure aggiornando esplicitamente il campo come NULL

    update tabella
    set campo = NULL
    where campo = ''

    puoi fare la verifica con una query.

    select *
    from tabella
    where campo IS NULL

    che ti da i campi con valore NULL

    select *
    from tabella
    where campo IS NOT NULL

    ti dara' invece i campi empty e valorizzati.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Provo...
    Con l'update 0 cambios.
    IS NULL mi da 0
    IS NOT NULL mi da 18 (numero dei record presenti)

    Utilizzando il phpadmin ho modificado il campo:
    Null = si, PREDEFINIDO=NULL

    Devo modificare anche la query?

  6. #6
    con phpmyadmin devi leggere proprio NULL in corsivo e maiuscolo.
    Se IS NULL = 0 significa che non hai valori NULL nella tabella.

    va bene l'alter table per definire NULL il campo, ma poi devi eseguire la query che ponga NULL come valore di campo. A questo punto ti spariranno le righe NULL da AVG() e da tutti gli altri raggruppamenti

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Ho provato cosí pero adesso il risultato é 0:

    $query = mysql_query("SELECT AVG(voto) AS media FROM voto_db WHERE (id='$user' AND voto IS NULL)");
    $media = mysql_fetch_row($query);
    $media = number_format($media[0], 2, ",", ".");
    return $media;
    }

  8. #8
    Originariamente inviato da gattofurbo
    Ho provato cosí pero adesso il risultato é 0:

    $query = mysql_query("SELECT AVG(voto) AS media FROM voto_db WHERE (id='$user' AND voto IS NULL)");
    $media = mysql_fetch_row($query);
    $media = number_format($media[0], 2, ",", ".");
    return $media;
    }
    Non capisco cosa hai nel db, come e' strutturato e cosa contengono i campi voto e tanto meno cosa vorresti ottenere.

    Ma se cerchi una media formata da campi NULL ...

    Devi semplicemente fare la media raggruppando per il campo rappresentativo del gruppo che ti interessa calcolare. Se il valore e' NULL verra' ignorato, se 0 verra' contato ed andra' a fare la media. Se nel where metti un id che non dara' righe valide ti rendera' un NULL

    SELECT AVG(voto) AS media
    FROM voto_db
    group by id

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Mi sono incasinato, meglio faccio la somma e divido per il numero di linee trovate.
    Sta storia dei NULL devo studiarmela meglio quando ho un po di tempo libero.
    Grazie per le risposte.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.