MySQL 5.7.5 以降では、機能の依存関係の検出が実装されています。 ONLY_FULL_GROUP_BY SQL モードが有効になっている場合 (デフォルトです)、MySQL は、選択リスト、HAVING 条件、または ORDER BY リストが、GROUP BY 句で名前が付けられておらず、機能的にもそれらに依存していない非集約カラムを参照するクエリを拒否します。 。 (5.7.5 より前の MySQL は関数の依存関係を検出せず、ONLY_FULL_GROUP_BY はデフォルトで有効になっていません。5.7.5 より前の動作の説明については、MySQL 5.6 リファレンス マニュアルを参照してください。)
まず、グループ化の概念と、グループ化後にどのような効果が得られるかを理解します。 グループ化は、グループの属性に基づいて統計的な分析を行うためのものです。 たとえば、生徒のテーブルを性別ごとにグループ化すると、次のようになります。男の子は何人、女の子は何人。 クエリ結果列は、sum や count などの集計関数で構成されている必要があります。例: select count(*),sex from students group by sex; select * from user group by user_name; の場合、どのような統計結果を取得したいですか? mysql5.6 はデフォルトでこの書き込みメソッド select * from user group by user_name を使用できますが、ステートメントは実際には内部で変換されます。 mysql5.7 以降ではデフォルトでこの書き込みメソッドを使用できず、エラーが報告されます。 したがって、書く前に、グループ化を通じて何をカウントする必要があるかを考え、適切な集計関数を使用してください
最新の文書説明は公式サイトに到達しました。
来源:https://dev.mysql.com/doc/ref...select のフィールドはグループ by に強制的に書き出す必要があります
ユーザー グループからユーザー名をユーザー名で選択します;
http://blog.csdn.net/u2830560...
まず、グループ化の概念と、グループ化後にどのような効果が得られるかを理解します。
グループ化は、グループの属性に基づいて統計的な分析を行うためのものです。
たとえば、生徒のテーブルを性別ごとにグループ化すると、次のようになります。男の子は何人、女の子は何人。
クエリ結果列は、sum や count などの集計関数で構成されている必要があります。例:
select count(*),sex from students group by sex;
select * from user group by user_name; の場合、どのような統計結果を取得したいですか?
mysql5.6 はデフォルトでこの書き込みメソッド select * from user group by user_name を使用できますが、ステートメントは実際には内部で変換されます。
mysql5.7 以降ではデフォルトでこの書き込みメソッドを使用できず、エラーが報告されます。
したがって、書く前に、グループ化を通じて何をカウントする必要があるかを考え、適切な集計関数を使用してください
SQL文でGROUP BYを使用する場合の3つの注意点
1: エイリアスは使用できません
2: 関数フィールドを除き、selectに表示されるフィールドはgroup byに使用する必要があります
3: エイリアスには予約語を使用できません
この3つ「MYSQL」をクリックするための要件はありません。
もう一度ステートメントを見てみましょう。ユーザー テーブルにフィールド user_name が 1 つしかない場合、このステートメントには問題はありません。
ユーザー テーブルに複数のフィールドがある場合、mysql のこのステートメントには問題はありません。 oracle と sqlserver に問題があります。
リーリー
user_name フィールドが存在する場合は問題ありません。 Group by はフィールドごとにグループ化するもので、通常は SQL と同様に実行できます。ただし、user_name は通常一意であり、一意のフィールドでグループ化することは意味がありません。
これは mysql の特別な機能のサポートです。@xuexiphpa が言ったように、パラメーターを使用してオフにすることができます。
ただし、これを使用することはお勧めしません。一般に、グループ化後は、グループ化前よりも返されるレコードの数が少なくなります。
どのレコードが返されるかを確認せずに、select * を直接使用します。
一般的には、集計関数の組み合わせがより一般的に使用されます
group by aggregation グループ化後は、要素を select 句内のみに保持することが最善です:
1、定数
2、group by
3 で指定された列名、count()、avg() などの集計関数、合計( *)待ってください
結果* にはグループごとに 1 つのレコードのみがリストされており、それが最初のレコードなのかランダムな値なのかはわかりません