Sql 计数和百分比范围

Sql 计数和百分比范围,sql,db2,aggregate-functions,Sql,Db2,Aggregate Functions,我需要做一些简单的计算,计算每个项目的百分比范围。看起来这应该是一个非常简单直接的查询,但是我的结果(百分比50%和>100%的计数)不正确,我很难找出原因。我在db2中工作,下面是我的数据示例 我返回错误结果的查询(“24”)是: 我不太确定您期望的是什么或字段数据类型设置为什么,但这可能是因为您比较字符串值而不是数字值来比较>'100.00%'我不太确定您期望的是什么或字段数据类型设置为什么,但这可能是因为您比较字符串值而不是数字值吗用于比较的数字项>'100.00%'查询的where子句

我需要做一些简单的计算,计算每个项目的百分比范围。看起来这应该是一个非常简单直接的查询,但是我的结果(百分比50%和>100%的计数)不正确,我很难找出原因。我在db2中工作,下面是我的数据示例

我返回错误结果的查询(“24”)是:


我不太确定您期望的是什么或字段数据类型设置为什么,但这可能是因为您比较字符串值而不是数字值来比较>'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_
列的数据类型是什么?它是从视图派生的字符串。它是从视图派生的字符串。