2017-01-31 16 views
2

は、私はこのようなクエリを持っています。混乱SQL注文

このクエリはなぜ機能しますか?

Created_Date 

は、クエリの選択部分でcreated_atの日付をとるときに作成されます。

SQLは、この順序で処理されます。

from, where, group by, having, select, order by 

Group BySelectの前に来ます。

上記のクエリでは、エイリアスはroup byの後に来ることはありませんでしたが、何らかの理由でgroup byで動作します。

これはなぜですか?

エイリアス名は、それが

を働いていた理由であることGroup byで参照することができ、あなたがcreated_dateという名前の列を持っていないが、あなたはここにPostgreSQLの

date(created_at as date) as created_date, 

を別名created_dateを作成している

+0

のすべてのケースではないが、selectの後に処理される可能性があります。 'created_date'が' SELECT'節で定義されたエイリアスであるため、あなた自身が答えたようです。 – IMSoP

+0

は私のポストを編集して明確にしました – LunchBox

+0

ああ、そうです。エイリアスは完全な形式(ここでは 'GROUP BY date(created_at as date)、id')に展開する必要があるため、処理の論理的順序*と*エイリアスの可視性*処理ステップ。私は、Postgresのエイリアスの可視性のルールが何であるか(そして他のDBMSでどのように変わるか)を正確に説明した、よく参照された答えを見ることに興味があります。 – IMSoP

答えて

2

論理的にGroup by句は、

+0

これらは 'Order by'節でも使われるかもしれません。 – Lemjur

+0

PRDP:ありがとう。それが私の疑問に答える。 – LunchBox