如何在 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;
如何在 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;