sql >> データベース >  >> RDS >> Mysql

MySQL 5.7&only_full_group_by

    1. はい。非集計列とは、MAXなどの集計関数を使用しない列のことです。 、COUNTSUMGROUP_CONCAT 、など。

    2. abに機能的に依存しています bの値の場合 aの特定の値を意味します 。これは通常、bを意味します はテーブルの一意のキーであり、a そのテーブルの他の列です。

    3. によって一意に決定されるのは、機能従属性と同じです。

    4. 別の方法は、GROUP BY内のすべての非集計列を一覧表示することです。 リスト:GROUP BY a.Z, a.Y, a.X

    このすべての理由は、GROUP BYにない列を選択した場合です。 リストでは、グループ化された行の任意の行から取得されます。これにより、多くの一般的なエラーが発生します。たとえば、よくある間違いは次のように書くことです。

    SELECT user_id, MAX(timestamp), ip_address
    FROM user_logins
    GROUP BY user_id
    

    ip_addressを期待します 各ユーザーの最新のログインのアドレスが含まれます。ただし、実際にはすべてが含まれます MAX(timestamp)の行のアドレスではなく、ログイン元のアドレスの 。 を参照してくださいSQL列の最大値を持つ行のみを選択 それを行う正しい方法について。

    関数従属性の例外は、通常、結合で役立ちます。

    SELECT u.user_id, u.user_name, MAX(l.timestamp)
    FROM users AS u
    JOIN user_logins AS l ON u.user_id = l.user_id
    GROUP BY u.user_id
    

    user_id以降 usersの主キーです テーブルでは、user_nameを一意に決定します 、したがって、GROUP BYに明示的にリストする必要はありません。 。




    1. SQLLIKEクエリの失敗-プリペアドステートメントの致命的なエラー

    2. 計算フィールドのMySQLIF条件

    3. mysqlで`showprocesslist`をカスタマイズする方法は?

    4. MyISAMとInnoDBでは単一のmysqlステートメントはアトミックですか?