SQL - Group By でエイリアスを使用する 質問する

SQL - Group By でエイリアスを使用する 質問する

SQL構文について興味があります。

SELECT 
 itemName as ItemName,
 substring(itemName, 1,1) as FirstLetter,
 Count(itemName)
FROM table1
GROUP BY itemName, FirstLetter

これは間違いです。

GROUP BY itemName, FirstLetter 

本当にそうあるべきだ

GROUP BY itemName, substring(itemName, 1,1)

しかし、なぜ利便性のために前者を単純に使用できないのでしょうか?

ベストアンサー1

SQL は、クエリが次の順序で実行されたかのように実装されます。

  1. FROM句
  2. WHERE句
  3. GROUP BY句
  4. HAVING 句
  5. SELECT句
  6. ORDER BY句

ほとんどのリレーショナル データベース システムでは、この順序により、前の手順で導入されている必要があるため、どの名前 (列またはエイリアス) が有効であるかが説明されます。

したがって、Oracle および SQL Server では、GROUP BY が SELECT 句の前に実行されるため、SELECT 句で定義した用語を GROUP BY 句で使用することはできません。

ただし、例外もあります。MySQL と Postgres には、それを可能にする追加のスマート機能があるようです。

おすすめ記事