sql >> データベース >  >> RDS >> Mysql

where句でのカウントの使用:グループ関数の無効な使用

    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人を登録したいと思っただけです。ニーズに応じて調整できるはずです。

    これが意味をなさない場合はお知らせください。詳しく説明します。



    1. 累積合計をリセットしますか?

    2. 1つのクエリで同じサブクエリが複数回使用される

    3. SQLで数値を丸める方法

    4. RODBCsqlSaveの問題