定義上、ORDERBYは後に処理されます GROUPBYを使用したグループ化。定義上、SELECTステートメントが処理される概念的な方法は次のとおりです。
- FROM句で参照されているすべてのテーブルのデカルト積を計算します
- FROM句の結合基準を適用して、結果をフィルタリングします
- WHERE句にフィルター基準を適用して、結果をさらにフィルター処理します
- GROUP BY句に基づいて結果をサブセットにグループ化し、そのようなサブセットごとに結果を1つの行にまとめ、集計関数の値を計算します-
SUM()
、MAX()
、AVG()
、など-そのようなサブセットごとに。 GROUP BY句が指定されていない場合、結果は単一のサブセットがあるかのように扱われ、集計関数は結果セット全体に適用され、単一の行に折りたたまれます。 - HAVING句に基づいてグループ化された結果をフィルタリングします。
- ORDERBY句に基づいて結果を並べ替えます。
もちろん、GROUPBY句を含むSELECTの結果セットで許可される列は
だけです。- GROUPBY句で参照される列
- 集計関数(
MAX()
など ) - リテラル/定数
- 上記のいずれかに由来する表現。
壊れたSQL実装のみが、select xxx,yyy,a,b,c FROM foo GROUP BY xxx,yyy
のようなものを許可します —個々のグループが単一の行に折りたたまれていることを考えると、列a、b、およびcへの参照は無意味/未定義です。