Discussione:
AVG e valore decimale
(troppo vecchio per rispondere)
Iceberg
2006-09-26 14:21:04 UTC
Permalink
Ciao, ho notato che usando l'AVG in un group by, il valore ritornato è
sempre intero e mai decimale....

quindi l'operazione 5/3 da come risultato 1

come posso ottenere valori con decimali??

Grazie
Lorenzo Benaglia
2006-09-26 14:35:01 UTC
Permalink
Post by Iceberg
Ciao, ho notato che usando l'AVG in un group by
Una funzione di aggregazione nella clausola GROUP BY?
Potresti fare un esempio completo con la struttura della tabella (CREATE
TABLE...), alcune righe di prova (INSERT INTO...) ed il result set che
vorresti ottenere in output?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org
AlessandroD
2006-09-26 14:34:18 UTC
Permalink
Post by Iceberg
Ciao, ho notato che usando l'AVG in un group by, il valore ritornato è
sempre intero e mai decimale....
Sarà perché l'espressione sulla quale applichi quell'operatore è di tipo
intero.
Post by Iceberg
quindi l'operazione 5/3 da come risultato 1
Scusa, che c'entra con AVG?
Ad ogni modo 5 e 3 sono due interi, quindi il risultato è un intero, cioè 1,
che è giusto.
Post by Iceberg
come posso ottenere valori con decimali??
Usalo dopo aver fatto un cast verso un tipo non intero, tipo AVG (convert
(float, Campo_Espressione))
Ciao, Alessandro
Iceberg
2006-09-26 15:49:35 UTC
Permalink
Post by AlessandroD
Ad ogni modo 5 e 3 sono due interi, quindi il risultato è un intero, cioè
1, che è giusto.
Se ho

ID - Valutazione
1 - 3
2 - 1
3 - 2

La media a casa mia sarebbe 1,6 e non 1
AlessandroD
2006-09-26 15:58:09 UTC
Permalink
Post by Iceberg
Post by AlessandroD
Ad ogni modo 5 e 3 sono due interi, quindi il risultato è un intero,
cioè 1, che è giusto.
Se ho
ID - Valutazione
1 - 3
2 - 1
3 - 2
La media a casa mia sarebbe 1,6 e non 1
Di che tipo è il campo Valutazione? Scommetti che è intero?
Leggi qui che c'è scritto sul tipo ritornato da AVG:
http://msdn2.microsoft.com/en-us/library/ms177677.aspx

Come ti avevo scritto la tua query deve diventare tipo questa:
select avg (convert (float, Valutazione)) as Media from Tabella
Ciao, Alessandro
Iceberg
2006-09-26 16:29:10 UTC
Permalink
Dopo i vostri post ho fatto alcune prove e, in effetti, mettendo i campi
come decimal la media viene visualizzata correttamente....

però credo che sia meglio utilizzare la tua soluzione avg (convert (float,
Valutazione)) as Media

Grazie ad entrambi per i suggerimenti!!!

Lorenzo Benaglia
2006-09-26 16:03:13 UTC
Permalink
Post by Iceberg
Post by AlessandroD
Ad ogni modo 5 e 3 sono due interi, quindi il risultato è un intero,
cioè 1, che è giusto.
Se ho
ID - Valutazione
1 - 3
2 - 1
3 - 2
La media a casa mia sarebbe 1,6 e non 1
La media di cosa?!
Se applichi la funzione di aggregazione AVG alla colonna Valutazione avrai
con quei dati una media pari a 2 (3+1+2/3).

USE tempdb;
GO

CREATE TABLE dbo.Valori(
ID int NOT NULL PRIMARY KEY,
Valutazione int NOT NULL
);
GO

INSERT dbo.Valori VALUES(1, 3);
INSERT dbo.Valori VALUES(2, 1);
INSERT dbo.Valori VALUES(3, 2);
GO

SELECT AVG(Valutazione) AS Media
FROM dbo.Valori;
GO

/* Output:

Media
-----------
2

(1 row(s) affected)

*/

DROP TABLE dbo.Valori;

Alessandro ti faceva semplicemente notare che se dividi due numeri interi,
avrai un valore intero, quindi 5/3 restituisce 1 come risultato (il 3 sta 1
volta nel 5 ed il resto "si perde" dato che il risultato è intero). Io però
non ho ancora capito che vuoi fare, quindi ti invito a postare i dati che ti
ho richiesto nell'altro post.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org
Continua a leggere su narkive:
Risultati di ricerca per 'AVG e valore decimale' (Domande e Risposte)
9
risposte
ho avira antivirus?
iniziato 2007-10-21 14:23:46 UTC
sicurezza
Loading...