SQL:GROUP BY用于数字范围?

时间:2015-06-18 18:01:23

标签: sql group-by

我和他的同事一样,是第一次发布SQL的新海报 我有一列数字(让我们称之为“数字”),其中的值范围为1-9999 我需要创建一个分组列(让我们称之为“数字级别”)并将AA的值分配给1-999,BB从1000-6999和CC为7000-9999的所有数字。
因此,最终输出将如下所示(输出不需要订购):

numbers      |   numbers level
-------------------------------------
   136       |        AA
  2935       |        BB
  4288       |        BB
  8987       |        CC
  436        |        AA
  3737       |        BB

有没有简单的方法来编写脚本,即:使用GROUP BY子句?
或者该分组列是否已经存在,我需要用命令填充它?

如果我的问题充满了无知,请告诉我,我会尽力澄清。

3 个答案:

答案 0 :(得分:9)

这对于case语句来说是最简单的(假设您正在使用sql-server;如果没有,请为正确的版本添加标签)。

Select [Numbers]
  , case when [Numbers] between 1 and 999 then 'AA'
         when [Numbers] between 1000 and 6999 then 'BB'
         when [Numbers] between 7000 and 9999 then 'CC'
    end as [Numbers Level]
from MyTable

如果您的任何数字不属于这些范围,它将返回NULL - 如果您希望在发生这种情况时获得不同的结果,请使用else

答案 1 :(得分:3)

分组列必须存在,但您可以改为使用case

select nr,
       case when nr <= 999 then 'AA'
            when nr <= 7000 then 'BB'
       else 'CC'
       end as NrLevel
from   Numbers

答案 2 :(得分:1)

这里你真的不需要一个小组,你可以用一个简单的case语句来完成它。

SELECT number,
CASE WHEN number between 1 and 999 THEN 'AA'
     WHEN number between 1000 and 6999 THEN 'BB'
     WHEN number between 7000 and 9999 then 'CC'
     END numbers_level
from Number_table