sql - 计算 SQL Server 中一行的平均值
问题描述
我有下表..百分比列的类型为 nvarchar
Data Percent1 Percent2 Percent3
1 3% 4% 6%
2 6% 8% 7%
3 8% 6% 8%
我必须计算每行的平均值,这样我才能得到像 Data Avg 这样的结果
1 4.33%
我试图将 %column 转换为十进制,以便我可以应用平均函数
select
Case WHEN Isnumeric([Percent1]) = 1
THEN CONVERT(DECIMAL(18,2),Replace([Percent1],'%',''))
ELSE 0 END AS Percent1
from DashboardData
但我只是得到 0 值..我猜测外部函数由于某种原因在内部函数之前运行。有人可以告诉我如何实现这一目标。
我知道 IsNumeric 函数会将其设为 0,但在此之前我尝试过,但我得到了一个类型不是数字的异常。
谢谢
解决方案
SELECT ISNUMERIC('3%')
将返回 0,您的所有其他值也将返回 0,因此您的 else 条件将始终是结果。
只需放下%
select
data,
(replace(Percent1,'%','') + replace(Percent2,'%','') + replace(Percent3,'%','')) * 1.0 / 3
请注意,如果NULL
您需要考虑这些值中的任何一个,因为NULL
+ any IS NULL
。
另外,你不想ISNUMERIC
太重……它会产生一些你可能没想到的结果
select
ISNUMERIC('$') --money which is a numeric value
,ISNUMERIC('1e4') --scientific notation
,ISNUMERIC('45D-1') --old scientific notation
,ISNUMERIC('.') --just the decimal portion of a float / decimal
推荐阅读
- java - Android AGP 4.2.0 + Java 11 编译失败
- sql - 如何在 Oracle SQL 中查找过去 90 天内没有评论的帖子
- image-processing - OpenCV - 计算图像中两个边缘之间的距离
- windows - 32 位 COM 对象的 CoCreateInstance 不会在 Windows 10 64 位中返回
- c# - 使用泛型添加 HTTP 客户端 - ASP.NET Core
- scripting - 用 tcl 处理大文件
- sql-server - 可选列上的 SQL Server 索引
- vbscript - 使用 fso.GetAbsolutePathName(".") 检查后如何设置正确的语法 if (fso.FileExists(""))
- javascript - Universal-Link / Deeplink 在 Safari 中打开,而不是在 iPhone 上安装 YouTube-App
- python - 为什么我的 sklearn 混淆矩阵和 plot_confusion_matrix 的值不相等?