しかし、残念! このクエリは、My SQL以外ではエラーになります(My SQLの場合も、結果は図10のようにはなりません)。エラーになる理由は、item_nameが集約キー(GROUP BY句に指定される列)ではないからです。 本誌Vol.44の「SQLアタマ養成講座」でも述べましたが、GROUP BY句を使用した場合、SELECT句に書ける要素は次の3つに制限されます。 定数 集約キー 集約関数 リスト5のクエリにおけるitem_nameは、このどれにも当てはまらないため、エラーになるわけです。では、なぜそもそもこの3種類以外の要素をSELECT句に記述することが許されないのでしょうか。 一言で言うと、これは存在の階層の差に起因するものです。GROUP BY句を使うということは、テーブルを小分けにして、文字通りいくつかのグループ(集合)を作るということです。そして、SQLにおいては
![第4回 行か列か、それが問題だ~スカラサブクエリの使い方 (3)存在の階層 | gihyo.jp](https://cdn-ak-scissors.b.st-hatena.com/image/square/e381c47f5bcaf18d3670508a2c74626ed1d0662e/height=288;version=1;width=512/https%3A%2F%2Fgihyo.jp%2Fassets%2Fimages%2FICON%2F2009%2F431_sql_academy2.png)