SELECT 構文に従って記述された SELECT 文の実際の論理的な実行順序は、標準の記述順序とは異なります。
次の例をご参照ください。
SELECT key
,MAX(value)
FROM src t
WHERE value > 0
GROUP BY key
HAVING SUM(value) > 100
ORDER BY key
LIMIT 100
;
実際の論理的な実行順序は、FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY->LIMIT
です。
- ORDER BY で参照されるのは、SELECT リストに生成された列のみです。FROM ソーステーブル内の列にはアクセスしません。
- HAVING 句では、GROUP BY キーと集計関数にアクセスします。 SELECT 操作の実行時、GROUP BY が指定されている場合、SELECT でアクセスできるのは、グループキーと集計関数だけです。 FROM ソーステーブルの列にはアクセスしません。
- SELECT リストに生成された列のみ参照できます。From のソーステーブルの列にはアクセスできません。
混乱を避けるため、MaxCompute では、クエリ文を実行順に記述できます。 たとえば、前述の文は、次のように記述できます。
FROM src t
WHERE value > 0
GROUP BY key
HAVING SUM(value) > 100
SELECT key
,MAX(value)
ORDER BY key
LIMIT 100
;
例 2:
SELECT shop_name
,total_price
,region
FROM sale_detail
WHERE total_price > 150
DISTRIBUTE BY region
SORT BY region
;
実際の論理的な実行順序は、FROM->WHERE->SELECT->DISTRIBUTE BY->SORT BY
です。