希望SQL在oracle中按值范围对值进行分组

希望SQL在oracle中按值范围对值进行分组,sql,plsql,oracle11g,Sql,Plsql,Oracle11g,我有一个表t1,有一个名为days的列,所以我想将这些天分为1到5天、6到15天和15天以上,然后计算每个组的计数,但我不知道如何编写sql,有人能告诉我吗?结果如下所示: Number Scope(days) 5 1-5 7 6-15 10 15+ 如果我理解清楚,这可能是一种方式: with t1(days) as ( select 1 from dual union all select 2 from dual un

我有一个表t1,有一个名为days的列,所以我想将这些天分为1到5天、6到15天和15天以上,然后计算每个组的计数,但我不知道如何编写sql,有人能告诉我吗?结果如下所示:

Number  Scope(days)    
  5      1-5
  7      6-15
  10     15+

如果我理解清楚,这可能是一种方式:

with t1(days) as ( 
    select  1 from dual union all
    select  2 from dual union all
    select  5 from dual union all
    select  6 from dual union all
    select  7 from dual union all
    select  8 from dual union all
    select 10 from dual union all
    select 11 from dual union all
    select 16 from dual union all
    select 17 from dual union all
    select 19 from dual union all
    select 19 from dual
)
/* the query */
select count(*),
       case
        when days between 1 and  5 then '1-5'
        when days between 6 and 15 then '6-15'
        else '+15'
       end    
from t1
group by case
        when days between 1 and  5 then '1-5'
        when days between 6 and 15 then '6-15'
        else '+15'
       end
这就产生了:

  COUNT(*) CASE
---------- ----
         3 1-5
         4 +15
         5 6-15
其思想是通过表示每个数字所在的“组”的内容进行聚合,您可以使用
大小写
轻松构建此类信息

根据Jarlh的建议,这可以改写为

select count(*), the_group
from (
        select case
                when days between 1 and  5 then '1-5'
                when days between 6 and 15 then '6-15'
                else '+15'
               end the_group
        from t1
     )     
group by the_group

这显然是假设您只有正数。

您尝试过什么吗?对于派生表,我完全不知道您不必重复
GROUP BY
中的
大小写表达式!(并且符合ANSI SQL)太棒了!(更不容易出错,更易于维护。)