Bueno, ahora queda más claro lo que sucede...
El SQL, en todos los DBMS (incluyendo Oracle), tiene ciertas reglas generales. Una de ellas expresa que no se pueden poner cláusulas agrupadas como MAX() en el WHERE, porque el WHERE aplica sobre
cada registro que se lee, mientras que las clausulas agrupadas lo hacen sobre
grupos de registros.
Para aplicar algo que corresponda a un grupo, pero se valide contra cada uno de los registros devueltos, se usa HAVING, al final de la query.
De todos modos lo que estás planteando en esa consulta es que te devuelva sólo aquellos registros donde el valor del crédito sea igual al máximo que exista en la tabla. Eso podría devolverte, dado el caso, un único registro. ¿Lo has tenido en cuenta? Es decir, no devolvería un grupo de los
mayores valores, sino sólo aquellos que sean iguales al mayor de todos.
¿Es eso lo que quieres?
Bueno, eso sería mas o menos así:
Código SQL:
Ver originalSELECT nom, credits
FROM TBLassignatures
HAVING credits = MAX(credits)
que también se puede escribir:
Código SQL:
Ver originalSELECT nom, credits
FROM TBLassignatures
WHERE credits = (SELECT MAX(credits) FROM TBLassignatures)
Este ultimo caso no viola lo antedicho porque la subconsulta se ejecuta una vez por cada registro leído, cumpliendo con la restricción. De todos modos resulta algo ineficiente.
Si la restricción de ser iguales al máximo valor no es necesaria, y quieres por ejemplo los 3 registros de mayor credito, sería así:
Código SQL:
Ver originalSELECT nom, credits
FROM TBLassignatures
WHERE ROWNUM < 4
ORDER BY credits DESC, nom ASC
Te conviene leer en detalle las restricciones del uso de las funciones y un buen manual de SQL para Oracle. Remarco esto último porque hay diferencias entre este DBMS y los demás en algunas cosas, por lo que ciertos ejemplos que encontrarás en tutoriales de SQL en generl, no se aplican bien en Oracle, o MySQL, o incluso en SQL Server.