次のクエリを実行すると。
テーブルから 30,60,90,120,150,180 を選択
以下の出力が得られます
しかし、私の欲望の出力は、1列だけで出たい.
順序 30 60 90 120 150 180
これは可能ですか?
次のクエリを実行すると。
テーブルから 30,60,90,120,150,180 を選択
以下の出力が得られます
しかし、私の欲望の出力は、1列だけで出たい.
順序 30 60 90 120 150 180
これは可能ですか?
UNION ALL
すべての主要な RDBMS で機能する使用
SELECT 30 "sequence" UNION ALL
SELECT 60 UNION ALL
SELECT 90 UNION ALL
SELECT 120 UNION ALL
SELECT 150 UNION ALL
SELECT 180
またはpostgresのgenerate_series()
機能を使用する
SELECT *
FROM generate_series(30, 180, 30) "sequence";
出力:
| | シーケンス | |---------| | | 30 | | | 60 | | | 90 | | | 120 | | | 150 | | | 180 |
両方のクエリのSQLFiddleデモを次に示します。
@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
また、RDMBS がウィンドウ関数をサポートしていて、いくつかのテーブルがあり、このテーブルに少なくとも 6 行が常に存在することがわかっている場合は、これを行うことができます :)
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