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

Oracle:GROUPBYEXPRESSIONエラーではありません

    試してみてください:

    SELECT c.courseid,
           c.coursename,
           AVG(a.mark) AS Average_Mark
    FROM   COURSE c
           INNER JOIN ASSESSMENT a
                   ON c.courseid = a.courseid
    GROUP  BY c.courseid,
              c.coursename
    ORDER  BY 3 DESC; -- or ORDER BY Average_Mark DESC
    

    Markのいくつかの値を集計するとき 平均を計算するために、Markの各値で並べ替えることができなくなります 。計算結果、つまりAverage_Markで並べ替える必要があります 。

    より一般的な観点から、ORDER BYが許可されています SELECT以外 この列がクエリされたテーブルの一部であり、GROUP BYを使用しない場合にのみ、ed列 またはDISTINCTGROUP BYを除く この表示されていない列の場合、ORDER BYできます

    理由は簡単です。GROUP BYを使用する場合 またはDISTINCT 、複数の行が1つとして表示される可能性があります。これらの「マージされた」行に表示されない値は、互いに異なる可能性があり、ORDER BYになります。 これらの値では不可能です。

    一部のDBMS(少なくともMySQL)は動作が異なり、ORDERが可能です。 ing BY GROUP BYを使用しても、表示されない値 。しかし、MySQLは、表示されていない値の最初に検出された値で順序付けているようです(フィドル> )。したがって、予測できない結果を防ぐために、これは避ける必要があることに注意してください。

    編集: ドキュメント を参照してください。 MySQLについてGROUP BY 取り扱い。



    1. 1つの列を複数の行に分割する

    2. ORACLEトリガーのエラー

    3. グリッドビューにmysqlを取り込む方法は?

    4. simpleJdbcCallがPl/SQLプロシージャを呼び出しています-ORA-22922存在しないLOB値