Sql 计数和百分比范围
我需要做一些简单的计算,计算每个项目的百分比范围。看起来这应该是一个非常简单直接的查询,但是我的结果(百分比50%和>100%的计数)不正确,我很难找出原因。我在db2中工作,下面是我的数据示例 我返回错误结果的查询(“24”)是:Sql 计数和百分比范围,sql,db2,aggregate-functions,Sql,Db2,Aggregate Functions,我需要做一些简单的计算,计算每个项目的百分比范围。看起来这应该是一个非常简单直接的查询,但是我的结果(百分比50%和>100%的计数)不正确,我很难找出原因。我在db2中工作,下面是我的数据示例 我返回错误结果的查询(“24”)是: 我不太确定您期望的是什么或字段数据类型设置为什么,但这可能是因为您比较字符串值而不是数字值来比较>'100.00%'我不太确定您期望的是什么或字段数据类型设置为什么,但这可能是因为您比较字符串值而不是数字值吗用于比较的数字项>'100.00%'查询的where子句
我不太确定您期望的是什么或字段数据类型设置为什么,但这可能是因为您比较字符串值而不是数字值来比较>'100.00%'我不太确定您期望的是什么或字段数据类型设置为什么,但这可能是因为您比较字符串值而不是数字值吗用于比较的数字项>'100.00%'查询的where子句正在比较字符串。您要比较数字。查询的where子句正在比较字符串。您要比较数字。可能是因为您正在比较字符串而不是数字。字符串“2%”更大比,也就是说,按字符串“100%”排序。如果您真的要在事实表中以字符串形式存储百分比,这不是很明智,您需要在比较之前将其转换为数字。这可能是因为您比较的是字符串而不是数字。字符串“2%”是“更大的”而不是,也就是说,按照字符串“100%”排序。如果您真的要在事实数据表中以字符串形式存储百分比,这不是很明智,您需要在比较之前将其转换为数字。看起来您的值是以字符串形式存储的(因此,
'%
)而不是以数字形式存储的
以下是一种将它们作为数字进行比较的方法,同时进行范围比较:
SELECT (case when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 10 then '<10'
when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 50 then '10-50'
when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 100 then '50-100'
when cast(replace(PERCENTAGE_USED, '%', '') as float) > 100 then '>100'
end) as range,
COUNT(*)
WHERE Dept_NAME = 'sales'
GROUP BY (case when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 10 then '<10'
when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 50 then '10-50'
when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 100 then '50-100'
when cast(replace(PERCENTAGE_USED, '%', '') as float) > 100 then '>100'
end);
SELECT(case-when-cast-cast(replace(PERCENTAGE_USED,“%”,“”)作为float)看起来您的值存储为字符串(因此是“%”
)而不是数字
以下是一种将它们作为数字进行比较的方法,同时进行范围比较:
SELECT (case when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 10 then '<10'
when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 50 then '10-50'
when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 100 then '50-100'
when cast(replace(PERCENTAGE_USED, '%', '') as float) > 100 then '>100'
end) as range,
COUNT(*)
WHERE Dept_NAME = 'sales'
GROUP BY (case when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 10 then '<10'
when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 50 then '10-50'
when cast(replace(PERCENTAGE_USED, '%', '') as float) <= 100 then '50-100'
when cast(replace(PERCENTAGE_USED, '%', '') as float) > 100 then '>100'
end);
SELECT(case when cast cast cast(replace(PERCENTAGE_USED,“%”,“”)作为float)使用的PERCENTAGE_
列的数据类型是什么?使用的PERCENTAGE_
列的数据类型是什么?它是从视图派生的字符串。它是从视图派生的字符串。