COUNT()
などの集計関数のみを使用できます HAVING
句、またはSELECT
GROUP BY
の場合の句 使用されている。 WHERE
句は、FROM
からの行に作用します 句。集計は行われていないため、集計関数を意味のあるものにする方法はありません。
あなたがやりたいことは、ENROLLテーブルから複数回出現するすべての学生を見つけることであるように見えます。次に、それらの学生についての詳細を取得したいと思います。これを行うには潜在的に多くの方法がありますが、サブクエリをお勧めします。
SELECT s.*
FROM student AS s
JOIN (
SELECT e.sno
FROM enroll AS e
GROUP BY e.sno
HAVING COUNT(*) > 1
) AS e
ON e.sno = s.sno
ORDER BY s.age DESC
LIMIT 10
JOIN
の後のサブクエリ その最初の計算(学生はENROLLに複数の行を持っています)を実行し、基本的に学生IDのリストを含む疑似テーブルを生成します。内部結合を行っているため、sno
を持つSTUDENTテーブルの行のみ サブクエリにが表示されます。これは基本的にON
によって処理されます 条項。
コメントで、生徒に追加の条件を適用できるようにしたいとおっしゃっていたので、それが発生するコードの例をいくつか追加しました。その情報はSTUDENTテーブルから取得されるため、サブクエリの外部で実行できます。 「最年長の学生」の意味を具体的に説明していなかったので、複数のコースに最年長の10人を登録したいと思っただけです。ニーズに応じて調整できるはずです。
これが意味をなさない場合はお知らせください。詳しく説明します。