-
はい。非集計列とは、
MAXなどの集計関数を使用しない列のことです。 、COUNT、SUM、GROUP_CONCAT、など。 -
列
a列bに機能的に依存していますbの値の場合aの特定の値を意味します 。これは通常、bを意味します はテーブルの一意のキーであり、aそのテーブルの他の列です。 -
によって一意に決定されるのは、機能従属性と同じです。
-
別の方法は、
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に明示的にリストする必要はありません。 。