Solución:
Esto debería hacerlo. Es posible que necesite un GROUP BY al final según el promedio que esté buscando.
SELECT CONVERT(int,ROUND(AVG(ColumnName),0))
FROM
TableName
EDITAR: Esta pregunta es más interesante de lo que pensé al principio.
Si configuramos una mesa ficticia como esa …
WITH CTE
AS
(
SELECT 3 AS Rating
UNION SELECT 4
UNION SELECT 7
)
SELECT AVG(Rating)
FROM
CTE
Obtenemos un promedio entero de 4
Sin embargo, si hacemos esto
WITH CTE
AS
(
SELECT 3.0 AS Rating
UNION SELECT 4.0
UNION SELECT 7.0
)
SELECT AVG(Rating)
FROM
CTE
Obtenemos un promedio decimal de 4.666..etc
Entonces parece que el camino a seguir es
WITH CTE
AS
(
SELECT 3 AS Rating
UNION SELECT 4
UNION SELECT 7
)
SELECT CONVERT(int,ROUND(AVG(CONVERT(decimal,Rating)),0))
FROM CTE
Lo que devolverá un valor entero de 5, que es lo que está buscando.
Si está en SQL Server, simplemente use round(avg(column * 1.0), 0)
.
La razón por * 1.0
se debe a que el servidor SQL en algunos casos devuelve cálculos utilizando el mismo tipo de datos de los valores utilizados en el cálculo. Entonces, si calcula el promedio de 3, 4 y 4, el resultado es 3.66 …, pero el tipo de datos del resultado es entero, por lo tanto, el servidor sql truncará 3.66 … a 3, usando * 1.0
implícitamente convierte la entrada en decimal.
Alternativamente, puede convertir o emitir los valores antes del cálculo promedio, como cast(column as decimal)
en lugar de usar el * 1.0
truco.
Si su columna no es una columna de números enteros, puede eliminar el * 1.0
.
PD: el resultado de round(avg(column * 1.0), 0)
sigue siendo un decimal, puedes convertirlo explícitamente usando convert(int, round(avg(column * 1.0), 0), 0)
o simplemente deja que el idioma que estés usando haga el trabajo (es una conversión implícita)
Select cast(AVG(columnname) as integer)