2015-05-11 2 views
1

Предположим, что в Oracle есть таблица DISTANCES с столбцом типа float с именем distance. Диапазон расстояний от [0, 1000]. Я хочу знать распределение расстояний, например, сколько строк находится в каждом из следующих диапазонов: (0, 10], (10, 50], (50, 100), (100, 500), .. ..? (5000, 10000]Как запросить распределение (сгруппированное по диапазону значений) значения столбца в Oracle?

Как я могу построить этот SQL запрос

+0

Пожалуйста показать полное определение вашей таблицы (в идеале, как 'create table') –

ответ

3

Используйте полученную таблицу, чтобы положить каждую дистанцию ​​в это группа Тогда 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 
+0

Ваш sql отлично работает. n, что, если я хочу знать процент каждой группы одновременно? –

+0

Я не пользователь Oracle, но я думаю, что у них есть хорошая функциональность. В любом случае, в ANSI SQL вы можете просто добавить «count (*) * 100.0/(выберите count (*) с расстояний)» в список выбора. – jarlh

3
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; 
Смежные вопросы