有人能帮我解决INT 的这个问题吗
Select
Location, Population,
MAX(total_cases) AS HighestInfectionCount,
MAX((total_cases / population)) * 100 AS PercentPopulationInfected
From
.CovidDeaths
--Where location like '%states%'
Group By
Location, Population
Order By
PercentPopulationInfected desc
我收到这个错误
nvarchar值"4678444992"的转换溢出了int列
SQL Server中可以放置在integer
列类型中的最大整数值为2147483647。所以你已经超过了它的价值两倍以上。
SQL本身是可以的,它的结果可以由服务器计算和显示,没有任何问题,但很明显,您正试图将此结果插入到另一个具有int
列的表中。
因此,由于超过而无法插入值,因此会出现此错误。在这种情况下,您可以在目标表中创建新的列类型Bigint
,从旧的int
列复制所有数据,重命名旧列,然后用最后一列的原始名称重命名新列。Phew((现在,如果一切都好,你可以放弃旧的列
UPD
我之前的回答是关于一种情况,当所有数据都是数字时,尽管如此,它还是很有用的,因为这种奇怪的计算不能保证结果不会插入到具有int列的某个目标表中。
说到解决方案,您必须在请求中投射大的伪数字
Select
Location, Population,
MAX(total_cases) as HighestInfectionCount,
MAX((cast(total_cases as bigint)/population)) * 100 as PercentPopulationInfected
From
.CovidDeaths
--Where location like '%states%'
Group By
Location, Population
Order By
PercentPopulationInfected desc
IMHO隐式转换是有史以来最糟糕的事情