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です。