假设在Oracle中有一个名为DISTANCES的表,名为distance的浮点类型列。距离范围是[0,1000]。我想知道距离的分布,例如,在以下每个范围中有多少行:[0,10],(10,50),(50,100],(100,500),.. 。?(5000,10000]如何在Oracle中查询列值的分布(按值范围分组)?
如何建立这个SQL查询
假设在Oracle中有一个名为DISTANCES的表,名为distance的浮点类型列。距离范围是[0,1000]。我想知道距离的分布,例如,在以下每个范围中有多少行:[0,10],(10,50),(50,100],(100,500),.. 。?(5000,10000]如何在Oracle中查询列值的分布(按值范围分组)?
如何建立这个SQL查询
使用派生表把每个距离到它的组,然后GROUP BY
和count
:
select dist_group, count(*)
from
(
select case when distance between 0 and 10 then '(0, 10)'
when distance between 10 and 50 then '(10, 50)'
...
when distance between 5000 and 10000 then '(5000, 10000)' end as dist_group
from distances
)
group by dist_group
你的sql完美地工作。一个更进一步的问题ñ,如果我想知道每个组在同一时间的百分比,该怎么办? –
我不是Oracle用户,但我认为他们有很好的功能。无论如何,在ANSI SQL中,您可以简单地将“count(*)* 100.0 /(从距离中选择count(*))”添加到选择列表中。 – jarlh
SELECT COUNT(CASE WHEN 0 <= distance AND distance <= 10 THEN distance END) AS in_range_0_10,
COUNT(CASE WHEN 10 < distance AND distance <= 50 THEN distance END) AS in_range_10_50,
COUNT(CASE WHEN 50 < distance AND distance <= 100 THEN distance END) AS in_range_50_100,
COUNT(CASE WHEN 100 < distance AND distance <= 500 THEN distance END) AS in_range_100_500,
COUNT(CASE WHEN 500 < distance AND distance <= 1000 THEN distance END) AS in_range_500_1000
FROM Distance;
请显示你的表的完整定义(最好是'create table') –