と呼ばれるテーブルがactivitiesありdeficienciesます。
activitiesテーブルには、学生が登録したすべての活動が含まれています。deficiencies表には、登録された活動のために学生が得る可能性のあるすべての欠陥が含まれています。
サンプル データを含むテーブル構造は次のとおりです。
活動表
activityid title
-------------------------------------------------------------
1 Student Retreat
2 Student Orientation
欠陥表
deficiencyid activity_id deficiency status
-------------------------------------------------------------
1 1 NARRATION CLEARED
2 1 PHOTO CLEARED
3 1 REPORT CLEARED
4 2 NARRATION WAITING
5 2 PHOTO CLEARED
6 2 REPORT WAITING
アクティビティ エントリごとに、deficienciesテーブルに 3 つの行が表示されます。そこにリストされているアイテムのすべてのステータスがすでにCLEARED. そのため、1 つ以上がまだ残っている場合WAITING、それらはクエリにリストされません。
このクエリを使用してこれを実行しようとしましたが、うまくいきませんでした:
SELECT * FROM deficiencies,activities WHERE status='CLEARED' AND activityid=activity_id AND COUNT(deficiencyid)=3 GROUP BY activity_id ORDER BY deficiencyid ASC
私はMySQLから以下を取得していました:
Invalid use of group function
私が期待していた出力は、activitiesテーブルの最初のレコードです。
別のサブクエリで複数SELECTのクエリを使用せずに、1 つのクエリのみを使用する最適なソリューションは何でしょうか? テーブルには何千ものレコードがあるため、最も効率的なクエリを使用できることを願っています。SELECTSELECT