Saltar al contenido

Promedio de T-SQL redondeado al número entero más cercano

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)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *