に列別名を受け入れていない、答えは次のように与えられる:PostgreSQLは3種類のテーブルを結合については、この<a href="https://pgexercises.com/questions/joins/threejoin2.html" rel="nofollow noreferrer">pgexercises</a>でWHERE句
私はSELECT
リストに
cost
エイリアスを参照することができないのはなぜ
select mems.firstname || ' ' || mems.surname as member,
facs.name as facility,
case
when mems.memid = 0 then
bks.slots*facs.guestcost
else
bks.slots*facs.membercost
end as cost
from
cd.members mems
inner join cd.bookings bks
on mems.memid = bks.memid
inner join cd.facilities facs
on bks.facid = facs.facid
where
bks.starttime >= '2012-09-14' and
bks.starttime < '2012-09-15' and (
(mems.memid = 0 and bks.slots*facs.guestcost > 30) or
(mems.memid != 0 and bks.slots*facs.membercost > 30)
)
order by cost desc;
WHERE
句?
私は同じクエリを実行する場合:
...
where
bks.starttime >= '2012-09-14' and
bks.starttime < '2012-09-15' and
cost > 30
order by cost desc;
エラーが発生します。
ERROR: column "cost" does not exist
それはそれがために、評価のためのだとthis answerから私と一緒に明らかです。しかし、なぜorder by cost desc;
が許可されるのですか?
Videの[Selectステートメントの評価の概念順](http://tinman.cs.gsu.edu/~raj/sql /node22.html)。最初に – klin
私はあなたの質問を誤解しました:)今私は完全に上記のステートメントでaggre –
コストステートメントは、whereステートメントが適用されるときに返されるレコードセットより前に存在しません。レコードセットが作成された後にORDER BYステートメントが適用され、列エイリアスが使用可能であることを意味します。 – Matt