1. ホーム
  2. sql

[解決済み] SQL - Group Byでaliasを使用する

2022-04-23 09:45:36

質問

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)

しかし、単に便宜上前者を使うだけではダメなのでしょうか?

どのように解決するのか?

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には、それを可能にする追加のスマートネスがあるようです。