首页 > 解决方案 > 如何在SQL中的单元格内生成两个数字之间的数字范围

问题描述

我有一个表,其中一列duration包含整数值,我正在尝试使用 sql 查询构建另一列,该列将包含一个介于 1 和duration列中的值之间的整数列表。

例如:

duration | range
3        | [1, 2, 3]
3        | [1, 2, 3]
2        | [1, 2]
1        | [1]
...

我在 JS 中找到了一个潜在的解决方案。

create or replace function list_range(DURATION double)
  returns VARCHAR
  language javascript
  strict
  as 'return [...Array(DURATION).keys()];';

SELECT 
   t.*,
   list_range(t.duration) as range
FROM table t

你觉得这个解决方案怎么样?可以优化吗?

标签: sqlrangesnowflake-cloud-data-platformsnowsql

解决方案


with temp as (
    select distinct duration, level as l
    from duration
    connect by level <= duration)
select duration,
       '['||listagg(l, ', ') within group(order by l)||']' as range
from temp
group by duration
order by 1 desc;

推荐阅读