ユニオンクエリの「右側」の選択ステートメントで、ユニオンクエリの「左側」の選択の結果を使用したいユニオンクエリがあります。以下のクエリは (少なくとも 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