2

ユニオンクエリの「右側」の選択ステートメントで、ユニオンクエリの「左側」の選択の結果を使用したいユニオンクエリがあります。以下のクエリは (少なくとも postgres では) 正しく動作しますが、query1 を 2 回 (1 回は query1 として、もう 1 回は sameAsQuery1 として) 実行しています。

select x as zz from (select 69 as x) as query1
union all
select count(zz) as zz from 
      (select x as zz from (select 69 as x) as sameAsQuery1) as query2

このようなことをしたいので、query1 を 2 回実行する必要はありませんが、うまくいきません。

select x as zz from (select 69 as x) as query1
union all
select count(zz) as zz from query1

次のエラー メッセージが表示されます。

エラー: リレーション "query1" は存在しません 行 3: query1 から zz として count(zz) を選択します

query1 が 1 回だけ実行されるように、このクエリを書き直す方法はありますか?

Llama 氏の応答に対する小さな変更は非常にうまく機能しました。次のようになります (「as q2」の追加に注意してください)。

WITH
query1 AS
(
    SELECT x AS zz FROM (SELECT 69 AS x) as q2
)
SELECT zz FROM query1
UNION ALL
SELECT COUNT(zz) AS zz FROM query1
4

4 に答える 4

1

group byほとんどのデータベースがand をサポートしているのに、なぜこのようなことをするのでしょうrollupか? 次のようなものが欲しいようです:

select x, count(*) as cnt
from <whatever>
group by x with rollup;
于 2015-09-24T15:32:19.957 に答える
0

query1 の結果を一時テーブルに入れる

select x as zz from (select 69 as x) as query1 into temptable

2 番目のクエリで一時テーブルを使用する

select zz from temptable
union all
select count(zz) as zz from temptable 
于 2015-09-24T15:31:50.207 に答える