このSQLの間違っている箇所を教えてください。 SELECT com.*, count(cnt.rep_id)

MySQL52閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

その他の回答(2件)

1

COUNT(列名)などの集合関数を使用する場合、SELECT句に指定できる列名、GROUP BYで指定したものだけです。 >mysqlだと取得でき MySQL独身の拡張仕様ですが、適用条件を満たしていなければエラーにはなりませんが、結果は保証されません。 https://dev.mysql.com/doc/refman/5.6/ja/group-by-handling.html 今回の場合、commentsテーブルの全列をGROUP BYに指定した場合と同じ結果にならなければ、結果は保証されていません。 どんな結果を得たいのでしょうか?それが分からなければ、具体的なアドバイスはできません。 com.idの値ごとに、cnt.rep_idがナル値でない行数を得たいのですか? もしそうなら、結果の行数はcom.idの値の種類数です。それにcommentsテーブルの他の列のどんな値を、一緒に得たいのでしょうか?

1人がナイス!しています

MySQLではSQLモードで、ONLY_FULL_GROUP_BY を指定しないと拡張仕様で動きます。 これは以下のように、SQLを勉強している人には間違った覚え方をしてしまう可能性があります。 (1)標準SQLや他のRDBMSではエラーになる指定を、エラーにしない。 (2)結果は返されるが、前提条件を満たしていないと結果は保証しない。 例で示すと、次のようになります。 a.正しい使い方 SELECT c1,c2,COUNT(*) FROM t1 GROUP BY c1,c2 b.間違った使い方 SELECT c1,c2,c3,c4,COUNT(*) FROM t1 GROUP BY c1,c2 MySQLは次の場合と結果が同じなら、使って良いとしています。 SELECT c1,c2,c3,c4,COUNT(*) FROM t1 GROUP BY c1,c2,c3,c4

1

>group byの値はselectに含めなければいけない 逆ですね。 GROUP BY を使う場合、SELECTに書かれているカラムは、集計関数に含まれているもの以外をすべてGROUP BYに指定する必要があります。 ただし、一部のRDBMS(mySQL・SQLITEなど)はこれに従っていなくてもエラーにせずに勝手に処理します。 (その場合、結果がどうなるかは保証されませんので、意図しない結果になることもあります。) すべての列を持ってくるなら、すべての列をGROUP BYに書いてください。

1人がナイス!しています