ホームページ >データベース >mysql チュートリアル >SQL GROUP BY 句でエイリアスを使用できないのはなぜですか?
SQL GROUP BY
句: エイリアスが常に機能するとは限らない理由
SQL エイリアスは可読性を高めますが、GROUP BY
句内での使用は制限されています。 この制限を調べてみましょう。 次のクエリを考えてみましょう:
<code class="language-sql">SELECT itemName as ItemName, substring(itemName, 1,1) as FirstLetter, Count(itemName) FROM table1 GROUP BY itemName, FirstLetter</code>
このクエリは、エイリアス FirstLetter
でグループ化しようとします。 ただし、標準 SQL では、グループ化列に FROM
句に表示される名前を付ける必要があります。正しい構文は次のとおりです:
<code class="language-sql">GROUP BY itemName, substring(itemName, 1,1)</code>
この制限は SQL の実行順序に起因します:
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
GROUP BY
句は、エイリアスが定義されている 句の前SELECT
に処理されます。 したがって、FirstLetter
が評価される時点では、GROUP BY
はまだ存在しません。
このルールにより、クエリの一貫性が確保され、曖昧さが回避されます。 GROUP BY
にエイリアスが存在する場合、SELECT
で元の列名を使用するのは冗長に見えるかもしれませんが、正確なグループ化が保証されます。
データベース固有のバリエーション
MySQL や PostgreSQL などの一部のデータベース システムには例外があります。高度なクエリ オプティマイザーは、GROUP BY
句のエイリアスを処理できます。 ただし、データベース間の移植性を考慮すると、この動作に依存することはお勧めできません。 標準 SQL に従うことで、異なるデータベース システム間でもクエリが一貫して機能することが保証されます。
以上がSQL GROUP BY 句でエイリアスを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。