如何在 SQL 查询中获取一个数字的所有前辈

How to get the all the predecessors of a number in a SQL query

如何在 SQL select 语句中获取一个数字的所有前导数?

我有这个查询:

SELECT 
    COUNT(CASE WHEN tb2.status = 'C' THEN 1 END) AS num_sales
FROM 
    table1 AS tb1
INNER JOIN 
    table2 AS tb2 ON tb1.id = tb2.id_sales

我得到这个结果:

num_sales
7
5
4
3
1
0

我要

num_sales predecessors
7 1,2,3,4,5,6,7
5 1,2,3,4,5
4 1,2,3,4
3 1,2,3
1 1
0

求助!

对于标准 SQL,您可以使用 listagg():

select mynumber,
       (select listagg(t2.mynumber, ',') within group (order by t2.mynumber)
        from mytable t2
        where t2.mynumber <= t.mynumber
       ) as predecessors
from mytable t;

大多数数据库都存在类似的功能,但字符串聚合的具体细节通常因数据库而异。

编辑:

在 Postgres 中,您将使用 generate_series():

select mynumber,
       (select string_agg(gs.n, ',' order by gs.n desc)
        from generate_series(1, t.mynumber, 1) gs(n)
       ) as predecessors
from mytable t;