Dav*_*ele 18
这应该做到这一点.您可能需要在结束时使用GROUP BY,具体取决于您要查找的平均值.
SELECT CONVERT(int,ROUND(AVG(ColumnName),0))
FROM
TableName
Run Code Online (Sandbox Code Playgroud)
编辑:这个问题比我最初想的更有趣.
如果我们设置这样的虚拟表...
WITH CTE
AS
(
SELECT 3 AS Rating
UNION SELECT 4
UNION SELECT 7
)
SELECT AVG(Rating)
FROM
CTE
Run Code Online (Sandbox Code Playgroud)
我们得到4的整数平均值
但是,如果我们这样做
WITH CTE
AS
(
SELECT 3.0 AS Rating
UNION SELECT 4.0
UNION SELECT 7.0
)
SELECT AVG(Rating)
FROM
CTE
Run Code Online (Sandbox Code Playgroud)
我们得到4.666..etc的小数平均值
所以它看起来像是要走的路
WITH CTE
AS
(
SELECT 3 AS Rating
UNION SELECT 4
UNION SELECT 7
)
SELECT CONVERT(int,ROUND(AVG(CONVERT(decimal,Rating)),0))
FROM CTE
Run Code Online (Sandbox Code Playgroud)
这将返回一个整数值5,这是你正在寻找的.
如果您在SQL Server中,只需使用round(avg(column * 1.0), 0)
.
原因* 1.0
是因为sql server在某些情况下使用与计算中使用的值相同的数据类型返回计算.所以,如果计算3,4和4的平均值,结果是3.66 ...,但结果的数据类型是整数,因此sql server将截断3.66 ...到3,使用* 1.0
隐式转换输入到小数.
或者,您可以在平均计算之前转换或转换值,cast(column as decimal)
而不是使用* 1.0
技巧.
如果您的列不是整数列,则可以删除* 1.0
.
PS:round(avg(column * 1.0), 0)
仍然是十进制的结果,您可以使用显式转换它,convert(int, round(avg(column * 1.0), 0), 0)
或者只是让您使用的任何语言完成工作(这是一个隐式转换)
这对它有用:
CONVERT(int,ROUND(AVG(CAST(COLUMN-NAME AS DECIMAL)) ,0))
Run Code Online (Sandbox Code Playgroud)
难道没有更短的方法吗?