我在SQL查询下运行时看到错误。有人可以说明原因吗?
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.
select 100 * count(column_name) / count(*) from <table_name>
另外,当我在查询下面运行时,我看到输出为1.因此,1 * 100应该仍然是100并且不确定上述错误的原因。
select count(column_name) / count(*) from <table_name>
答案 0 :(得分:0)
我的错误,我应该在查询下方运行(使用&#39;(&#39;和&#39;)&#39;作为计数输出):
select 100 * (count(column_name) / count(*)) from <table_name>
答案 1 :(得分:0)
错误原因是由计算的列值超出列的指定大小引起的。 https://technet.microsoft.com/en-us/library/ms163363(v=sql.105).aspx
select count(column_name) / count(*) from <table_name>
但是COUNT()返回int并且int / int总是0然后我建议你把你的数量计算到浮动等。
喜欢这个
select round(cast(count(column_name) as float) / count(*),2) from <table_name>
答案 2 :(得分:0)
COUNT()
会返回int
数据类型,其上限为2.147.483.647。如果COUNT()
的结果对于您正在执行的任何查询都高于此值,则会弹出算术溢出。
COUNT_BIG()
以相同的方式工作并返回bigint
数据类型,这应解决此溢出问题。将COUNT()
替换为COUNT_BIG()
。
select 100.0 * count_big(column_name) / count_big(*) from <table_name>
如果您的数据可能存在,您还应该阻止除以0。
select
100.0 * count_big(column_name) / NULLIF(count_big(*) , 0)
from
<table_name>