View Full Version : Openoffice Base - Come calcolare una media in una query
dark.shark.dsk
08-07-2009, 21:40
Ciao a tutti,
ho qualche problemino nel far calcolare ad una query una media di 3 campi...
Al momento ho provato ad inserire questa forumula in un campo vuoto della query:
("campo1" + "campo2" + "campo3")/3
La cosa funziona bene però solo se tutti e tre i campi sono popolati, mentre se uno è vuoto, anche il campo della media rimane vuoto, mentre a me servirebbe che nel caso ci fossero solo 2 numeri o anche uno solo la media me la calcoli lo stesso...
Mi piacerebbe anche sapere se oltre alla mendia c'è magari una formula già fatta per calcolare la deviazione standard...
Grassie dell'aiuto! :D
john_revelator
09-07-2009, 14:56
Ciao. Non utilizzo Base ma nel caso adotti un sql standard prova a fare
select coalesce(campo1,0) + coalesce(campo2,0) + coalesce(campo3,0) as totale from tabella.
Raffaele53
09-07-2009, 16:00
Se la cella riporta uno zero, la funzione Media viene calcolata diviso 4.
2 4 8 0
=MEDIA(C9;D9;E9;F9) risultato 3,5
Se la cella risulta vuota, la funzione Media viene calcolata diviso 3
2 4 8 (vuota)
=MEDIA(C9;D9;E9;F9) risultato 4,67
Casomai =se(esito x cella=0;"";esito x cella)
OpenOffice 3,10
john_revelator
09-07-2009, 18:27
Ho dato uno sguardo a Base e devo dire che la sua gestione dell'sql fa abbastanza schifo. :D
Comunque la tua query definitiva dovrebbe essere questa:
SELECT "campo1", "campo2", "campo3", ( coalesce( "campo1", 0 ) + coalesce( "campo2", 0 ) + coalesce( "campo3", 0 ) ) / ( casewhen( "campo1" <> 0, 1, 0 ) + casewhen( "campo2" <> 0, 1, 0 ) + casewhen( "campo3" <> 0, 1, 0 ) ) AS "media" FROM "tabella"
;)
Base usa di default questo motore http://hsqldb.org.
Magari nella documentazione del sito trovi la sintassi.
Ricordo che per le discussioni su Openoffice.org esiste la discussione ufficiale:
http://www.hwupgrade.it/forum/showthread.php?t=1044718
dark.shark.dsk
09-07-2009, 23:06
Grazie a tutti per i consigli! :D
Ora mi metto a vedere cosa riesco a combinare.... :cool:
@ john_revelator
Tanto per sapere, esattamente la funzione "coalesce" così che fa?
dark.shark.dsk
09-07-2009, 23:21
@ john_revelator
Funziona! Sei un genio! Grazie mille!!! :ave: :ave:
A questo punto mi faresti davvero un piacere se mi potessi spiegare esattamente come funge la formula che hai usato, così capisco come applicarla anche ad altri calcoli matematici! :sborone:
john_revelator
10-07-2009, 00:13
Come hai avuto modo di notare tu stesso, andando a sommare i vari campi, nel caso anche uno solo sia pari a null, la somma risulta ugualmente pari a null.
La funzione coalesce (com'era facilmente reperibile con una ricerchina su google :D ) restituisce la prima espressione non null tra i relativi argomenti. Quindi impostando il secondo parametro a 0, nel caso il primo (il nome del campo) non sia null, verrà restituito il suo valore, in caso contrario verrà restituito 0 anzichè null e quindi la somma andrà a buon fine. Ho perso dieci minuti buoni a imprecare prima di rendermi conto che in Base non esiste la funzione if ma bensì casewhen.
Per poter fare la media devo sapere per quanto devo dividere (1,2 o 3) e quindi con la seconda parte della query verifico uno ad uno i valori.
Altra cosa che mi ha fatto inca**are di Base è che non c'è stato verso di testare se il campo fosse "is null" ma ha richiesto il confronto con lo 0, mah.
Quindi ho verificato ciascuno dei tre campi per vedere se fosse compilato o meno (facendomi restituire 1 o 0) e la somma di tale confronto dei tre campi restituisce il valore per cui devo dividere.
Spero di essere stato chiaro. :)
edit. Per quel che riguarda la tua richiesta relativa alla deviazione standard, oltre al link che ti ha dato il mio vicino :) dai uno sguardo anche qui
http://wiki.services.openoffice.org/wiki/Built-in_functions_and_Stored_Procedures
dark.shark.dsk
10-07-2009, 00:45
Ho capito, grazie per la spiegazione. :D
Cmq lo so che c'è google, ma alle volte, quando è possibile, è trovo che sia ancora meglio chiedere direttamente spiegazioni all'autore, sopratutto per fare magari quattro chiacchere con qualcuno che evidentemente ne sa più di me... ;)
Raffaele53
10-07-2009, 14:00
Pardon, meglio tardi che mai............Base significa Access
Il bello che ho anche visto quando hai scritto Query, ma non ci ho fatto caso perchè in quel momento avevo un problema con Calc (Excel)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.