これは、GROUP BY 句がないと、MySQL から返される出力が誤解を招く可能性があるためです。デモンストレーションの目的で、以下の「Students」テーブルに次の例を示しました。
mysql> Select * from Student; +------+---------+---------+-----------+ | Id | Name | Address | Subject | +------+---------+---------+-----------+ | 1 | Gaurav | Delhi | Computers | | 2 | Aarav | Mumbai | History | | 15 | Harshit | Delhi | Commerce | | 20 | Gaurav | Jaipur | Computers | +------+---------+---------+-----------+ 4 rows in set (0.00 sec) mysql> Select count(*), Name from Student; +----------+--------+ | count(*) | name | +----------+--------+ | 4 | Gaurav | +----------+--------+ 1 row in set (0.00 sec)
上記のクエリ結果から、グループ関数 COUNT(*) の出力がテーブルとして返されることがわかりますが、 「Name」フィールドの値「Gaurav」は誤解を招きます。なぜなら、それがカラムの最初の値であるか、カラムに複数回格納されているかのいずれかに基づいてこれを行っているため、MySQL はそれを返します。
GROUP BY 句を使用してこのクエリを作成すると、結果セットは次のようになります -
mysql> Select count(*), name from student GROUP BY id; +----------+---------+ | count(*) | name | +----------+---------+ | 1 | Gaurav | | 1 | Aarav | | 1 | Harshit | | 1 | Gaurav | +----------+---------+ 4 rows in set (0.00 sec)
上記の結果セットからわかるように、GROUP BY 句を使用すると、意味のある出力が得られます。
以上がMySQL SELECT クエリで GROUP BY 句を使用せずに、グループ化されていないフィールドに対してグループ関数を使用すべきではないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。