当我执行以下查询时:
我得到了如下输出:。
但是我想要的输出结果是,只在一列中输出:
但是我想要的输出结果是,只在一列中输出:
序列 30 60 90 120 150 180这是否有可能?
序列 30 60 90 120 150 180这是否有可能?
使用UNION ALL
,它可以在所有主要的关系型数据库管理系统中工作。
SELECT 30 "sequence" UNION ALL
SELECT 60 UNION ALL
SELECT 90 UNION ALL
SELECT 120 UNION ALL
SELECT 150 UNION ALL
SELECT 180
或者使用PostgreSQL的generate_series()
函数。
SELECT *
FROM generate_series(30, 180, 30) "sequence";
输出:
| SEQUENCE | |----------| | 30 | | 60 | | 90 | | 120 | | 150 | | 180 |
这是用于两个查询的SQLFIddle演示。
select *
from ( values (30), (60), (90), (120), (150), (180) ) as numbers (seq_no);
with numbers (seq_num) as (
values (30), (60), (90), (120), (150), (180)
)
select *
from numbers;
正如 @peterm 所说,在 PostgreSQL 中使用 generate_series() 是正确的方法。
在其他支持递归 CTE 的 RDBMS 中,您可以像这样使用它:
with recursive cte(sequence) as (
select 30
union all
select sequence + 30
from cte
where sequence < 180
)
select *
from cte
select
row_number() over(order by id) * 30
from temp
limit 6
正如其他答案所提到的那样,如果您要生成的数据是均匀分布的系列,则generate_series是正确的选择。如果不是,我喜欢a_horse_with_no_name的版本。另一种方法是:
select unnest('{30,60,90,120,150,180}'::int[]) as numbers