SQL A 列占 B 列的百分比
SQL percentage of column A over column B
好的,所以我有这个 SQL 查询,行数和计数失败,如下例所示。
|CountFound|CountFailed|
|----------|-----------|
| 6510 | 979 |
问题是,我如何进行查询以显示失败百分比 (%)。就像下面的例子..
|CountFound|CountFailed|PercentageFailed|
|----------|-----------|----------------|
| 6510 | 979 | 15.03% |
就这么简单
select (CountFailed * 1.0 / NULLIF(CountFound,0)) * 100
From yourtable
如果任一列中没有小数部分,则明确将其转换为 decimal/float 值以避免整数除法
使用NULLIF
避免被零除错误
我认为你可以用一种完全独立于数据库的方式做你想做的事:
select concat(cast(cast(CountFailed * 1.0 / nullif(CountFound, 0) as decimal(5, 2)) as varchar(255)), '%') as PercentageFailed
from t;
当然,我会这样做:
select CountFailed * 1.0 / nullif(CountFound, 0)
我认为没有理由将其格式化为数据库输出的百分比。
(* 1.0
只是因为如果操作数都是整数,有些数据库会进行整数除法;有些则不会。)
如果SQL服务器
Select CountFound
,CountFailed
,PercentageFailed = Format((CountFailed*1.0)/NULLIF(CountFound,0),'0.00%')
From YourTable
好的,所以我有这个 SQL 查询,行数和计数失败,如下例所示。
|CountFound|CountFailed|
|----------|-----------|
| 6510 | 979 |
问题是,我如何进行查询以显示失败百分比 (%)。就像下面的例子..
|CountFound|CountFailed|PercentageFailed|
|----------|-----------|----------------|
| 6510 | 979 | 15.03% |
就这么简单
select (CountFailed * 1.0 / NULLIF(CountFound,0)) * 100
From yourtable
如果任一列中没有小数部分,则明确将其转换为 decimal/float 值以避免整数除法
使用NULLIF
避免被零除错误
我认为你可以用一种完全独立于数据库的方式做你想做的事:
select concat(cast(cast(CountFailed * 1.0 / nullif(CountFound, 0) as decimal(5, 2)) as varchar(255)), '%') as PercentageFailed
from t;
当然,我会这样做:
select CountFailed * 1.0 / nullif(CountFound, 0)
我认为没有理由将其格式化为数据库输出的百分比。
(* 1.0
只是因为如果操作数都是整数,有些数据库会进行整数除法;有些则不会。)
如果SQL服务器
Select CountFound
,CountFailed
,PercentageFailed = Format((CountFailed*1.0)/NULLIF(CountFound,0),'0.00%')
From YourTable