0

晚上好!

我有一个名为 SWIMMER 的表,需要查找(在名为 TIME 的 NUMERIC 字段中)给定时间间隔内某些值的出现次数(我使用的是 Oracle10g)。我需要展示类似的东西:

23 高于或等于 TIME 显示值为 300
的 Horizo​​ntalBar 22,3 高于或等于 TIME 次要或等于 23 显示值为 140
的 Horizo​​ntalBar 21,6 高于或等于 TIME 次要或等于 22,3 显示值为 15
的 Horizo​​ntalBar 20,9 高于或等于TIME 次要或等于 21,6 显示值为 3 的 Horizo​​ntalBar

它可能有一个查询有这样的回报?我怎么能组装那个查询?(注意:符号是次要或相等,我不能在这里发布,因为它每次都会出错)

最好的祝福,

4

1 回答 1

1

尝试这样的事情(这是一个 sqlfiddle):

select case 
           when time >= 23 then '23 =< TIME'
           when time < 23 and time >= 22.3 then '23 > TIME >= 22,3'
           when time < 22.3 and time >= 21.6 then '22,3 > TIME >= 21,6'
           when time < 21.6 and time >= 20.9 then '21,6 > TIME >= 20,9'
           else '20,9 > TIME'
        end   || ' with value '|| count(*) v
from your_table
group by case 
           when time >= 23 then '23 =< TIME'
           when time < 23 and time >= 22.3 then '23 > TIME >= 22,3'
           when time < 22.3 and time >= 21.6 then '22,3 > TIME >= 21,6'
           when time < 21.6 and time >= 20.9 then '21,6 > TIME >= 20,9'
           else '20,9 > TIME'
         end 

结果:

21,6 > TIME >= 20,9 with value 8 
20,9 > TIME with value 4 
22,3 > TIME >= 21,6 with value 6 
23 > TIME >= 22,3 with value 15 
23 =< TIME with value 66

更新:正如 DavidAldrige 建议的那样,您可以有一个子查询:

select intrvl || ' with value '|| count(*) v
from
(select case 
           when time >= 23 then '23 =< TIME'
           when time < 23 and time >= 22.3 then '23 > TIME >= 22,3'
           when time < 22.3 and time >= 21.6 then '22,3 > TIME >= 21,6'
           when time < 21.6 and time >= 20.9 then '21,6 > TIME >= 20,9'
           else '20,9 > TIME'
        end   intrvl, time
from t)
group by intrvl

这是另一个演示

于 2013-04-17T05:20:25.863 回答