することで、グループ内の列ではないの選択、私は既存のアプリケーションに機能を追加しようとしていると私は、MySQLのビュー間でこのような何か来た:いくつかの集約関数がありますので、のMySQL -
SELECT
AVG(table_name.col1),
AVG(table_name.col2),
AVG(table_name.col3),
table_name.personID,
table_name.col4
FROM table_name
GROUP BY table_name.personID;
OKを。あなたがグループ化しているので、personIDを選択することができます。しかし、集計関数にはなく、GROUP BY句の一部ではない列も選択しています。これはどのように可能ですか?値はグループごとに一意ではないので、ランダムな値を選択するだけですか?
どこから来たのですか(MSSQL Server)、これはエラーです。誰かがこの動作を私に説明し、MySQLでなぜ許可されているのですか?
これは完全に真実ではないと私は言いたいと思います。 ANSI SQL-99では、選択されたフィールドは集計でなければならず、機能はgroup by句に依存します。 user_idでグループ化するときにuser_nameを選択するのはまったく問題ありません。 SQL ServerとOracleは、これに準拠していません。user_idのみがgroup byリストにあるときにuser_nameを選択できないためです。選択された各列が実際に機能的にuser_idに依存しているかどうかをチェックしないため、MySQLは準拠しません。 –
@ThorstenKettner、ありがとう、あなたは正しいです。 MySQL 5.7が改良されました。この場合はANSI SQLをサポートする方がはるかに賢明です。 –