Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [sql] media

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    525

    [sql] media

    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:

    Codice PHP:
    SELECT idsumc1 ) , sumc2 ) , sumc3 ) , sumc4 ) , avg( (
    c1 c2 c3 c4
    ) / ( if( c1 !=01) + if( c2 !=01) + if( c3 !=01) + if( c2 !=01) ) ) AS media
    FROM votazioni
    GROUP BY id 
    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à...
    Hop provato così a sostituire con una cosa simile:

    Codice PHP:
    SELECT idsumc1 ) , sumc2 ) , sumc3 ) , sumc4 ) , count(id) as totavg( (
    c1 c2 c3 c4
    ) / ( tot  ) ) AS media
    FROM votazioni
    GROUP BY id 
    ma ho l'errore: #1054 - Unknown column 'tot' in 'field list'
    Quindi vorrei riuscire a capire il funzionamento di quella sintassi oppure sapere un modo alternativo per ottenere questo risultato....
    Thx !!!

    Codice PHP:
    CREATE TABLE `votazioni` (
      `
    idint(10NOT NULL,
      `
    c1int(2NOT NULL,
      `
    c2int(2NOT NULL,
      `
    c3int(2NOT NULL,
      `
    c4int(2NOT NULL
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    --
    -- 
    Dump dei dati per la tabella `votazioni`
    --

    INSERT INTO `votazioni` ( `id`, `c1`, `c2`, `c3`, `c4`)VALUES
    21234),
    82346),
    62112),
    61543); 
    Risultati: id 2 media 2,5
    id 6 media 2,37
    id 8 media 3,75

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select id,avg((c1+c2+c3+c4)/4) as media
    from votazioni
    group by id

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    525
    si, è corretto.... la query è più semplice, anche se è necessario inserire la costante per il numero dei criteri ( 4 ) mentre con l'altra versione non serve in qto calcolata a run time...peccato che non capisco la sintassi della precedente!

    Thxxx !!

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non ho capito cosa devi calcolare. Se sai che i campi sono 4 dividi per 4.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    525
    SI, hai ragione, se non li conosco a priori non potrei neanke specificarli nella funzione della avg ....
    Cmq... sto provando ad ottenere il risultato formattato con solo due cifre decimali, ma ho errore e non funziona, ma in rete ho trovato solo questa sintassi da utilizzare: decimal(numero,cifre intere,cifre decimali), quindi applicandola diventa:


    select id,decimal(avg((c1+c2+c3+c4)/4),3,2) as media
    from votazioni
    group by id

    ma l'errore è:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'decimal ( avg( ( c1 + c2 + c3 + c4 ) / 4 ) , 3 , 2 ) as media from votazioni g' at line 1

    la mia versione sql non riconosce questa funzione?

    Thxxx

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select id,format(avg((c1+c2+c3+c4)/4),2) as media
    from votazioni
    group by id

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 © 2026 vBulletin Solutions, Inc. All rights reserved.