3

次のクエリを実行すると。

テーブルから 30,60,90,120,150,180 を選択

以下の出力が得られますここに画像の説明を入力

しかし、私の欲望の出力は、1列だけで出たい.

順序
   30
   60
   90
   120
   150
   180

これは可能ですか?

4

4 に答える 4

6

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デモを次に示します。

于 2013-11-08T07:39:57.943 に答える
1

@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

sql fiddle demo

于 2013-11-08T08:15:33.163 に答える
1

他の回答が言及しているように、generate_series は、生成するデータがこのような等間隔のシリーズである場合の方法です。そうでない場合は、a_horse_with_no_name のバージョンが好きです。別の方法は次のとおりです。

select unnest('{30,60,90,120,150,180}'::int[]) as numbers
于 2013-11-08T11:52:35.280 に答える