将结果分成2组或我指定的任何数字

时间:2019-06-20 23:51:26

标签: sql grouping

我需要一种将结果放入指定的#组中的方法。

我尝试使用ntile()函数,我认为该函数会使用,但无法正常工作:

WITH CTE AS (
  SELECT 1 as Number
  UNION ALL
  SELECT Number+1
  FROM CTE 
  WHERE Number < 100 
)
SELECT *, ntile(80) over (order by number desc) as 'test'
 FROM CTE

为获得预期结果,四分位数列应每2个条目输出一个数字(如NTILE(80)中所指定),但是它可以是2、4、10或我指定的任何数字。

也许NTILE()不是正确的功能,但是有一个功能可以满足我的需求吗?

因此,如果我指定3,则结果应每3条记录分组。如果我指定15,则结果应每15条记录分组,然后移至下一组。

希望我很清楚

2 个答案:

答案 0 :(得分:1)

  

...应该每2个条目输出一个数字...

否,您有100个条目,并且想要将它们分为80组。您将获得一些具有1个条目的组,而其他具有2个条目的组。

阅读NTILE()的定义。如果您希望包含2个条目的组,可以将其分为50个组,如下所示:

WITH recursive
CTE AS (
  SELECT 1 as Number
  UNION ALL
  SELECT Number + 1
  FROM CTE 
  WHERE Number < 100 
)
SELECT *, 
  ntile(50) -- changed here
  over (order by number desc) as test
FROM CTE

您没有说您正在使用什么数据库引擎,所以我假设使用PostgreSQL。

答案 1 :(得分:0)

我认为您只需要模运算符:

25000.0