Funzione AVG di SQL2005

giovedì 02 dicembre 2010 - 19.37
Tag Elenco Tags  SQL Server 2008 R2  |  SQL Server 2008  |  SQL Server 2005  |  SQL Server Express

erongis Profilo | Junior Member

Ho un problema. Devo calcolare la media di un valore in un campo che è di tipo INT. La funzione AVG purtroppo mi restituisce un risultato di tipo INT e si mangia i decimali che invece a me servono. Ora, dovrei cambiare il tipo di campo, ma la cosa mi creerebbe un sacco di probolemi.

Esiste un modo per fargli calcolare la media con decimali di valori INT?

Di seguito la sintassi SQL:

"SELECT AVG(NumFarmaci) as MediaFarm FROM pazienti"

Grazie in anticipo.

lbenaglia Profilo | Guru

>Ho un problema. Devo calcolare la media di un valore in un campo
>che è di tipo INT. La funzione AVG purtroppo mi restituisce un
>risultato di tipo INT e si mangia i decimali che invece a me
>servono. Ora, dovrei cambiare il tipo di campo, ma la cosa mi
>creerebbe un sacco di probolemi.
>
>Esiste un modo per fargli calcolare la media con decimali di
>valori INT?

Certo, è sufficiente castare la colonna in un data type decimale (a lunghezza fissa o variabile) prima di applicare la funzione di aggregazione:

USE tempdb; CREATE TABLE dbo.foo( value int NOT NULL ); INSERT dbo.foo VALUES (1), (2), (3), (4); SELECT AVG(value) AS Media FROM dbo.foo; /* Output: Media ----------- 2 (1 row(s) affected) */ SELECT AVG(CAST(value AS real)) AS Media FROM dbo.foo; /* Output: Media ---------------------- 2,5 (1 row(s) affected) */ SELECT AVG(value * 1.) AS Media FROM dbo.foo; /* Output: Media --------------------------------------- 2.500000 (1 row(s) affected) */ DROP TABLE dbo.foo;

Essendo la colonna value un intero, il risultato della funzione AVG() sarà anch'esso intero (1° esempio).
Nel 2° esempio ho convertito esplicitamente la colonna da intero a real ottenendo come risultato della funzione un valore float.
Infine nel 3°caso ho semplicemente moltiplicato il valore intero per un literal decimal (1.) ottenendo un valore decimal (per via del Data Type Precedence) che aggregato restituisce nuovamente una valore decimal.

>Grazie in anticipo.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5