我需要做一些简单的计算,计算每个项目的百分比范围。似乎这应该是一个非常简单直接的查询,但我的结果(百分比<10%,> 50%,&> 100%的数量回归不正确,我无法弄清楚原因。我'我在db2中工作,这是我的数据样本。
我的返回错误结果(“24”)的查询是:
SELECT
COUNT(*)
FROM Fact_Table
WHERE Dept_NAME = 'sales'
AND PERCENTAGE_USED > '100.00%'
答案 0 :(得分:1)
我不太清楚你期望的是什么或者字段数据类型被设置为什么,但是这可能是你比较字符串值而不是数字字符串进行比较&gt; '100.00%'
答案 1 :(得分:1)
这可能是因为你在比较字符串而不是数字。字符串'2%'是“大于”,即在字符串'100%'之后排序。如果你真的在事实表中将百分比存储为字符串,这不是很明智,那么在比较之前你需要将它们转换为数字。
答案 2 :(得分:1)
看起来你的值被存储为字符串(因此是'%'
)而不是数字。
这是一种将它们作为数字进行比较的方法,并同时进行范围:
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);
答案 3 :(得分:0)
您的查询的where子句正在比较字符串。你想比较数字。