Tabla derivada no reconocida en el comando WHERE.
Soy nuevo y todavía estoy aprendiendo, así que por favor disculpa mis códigos. He buscado en Google y, como último recurso, estoy publicando en busca de ayuda. Espero que uno de los programadores más experimentados pueda ayudar.
Lo que estoy tratando de lograr: ¿qué curso tiene un número de estudiantes por debajo del promedio?
Estoy utilizando SQL Server Management Studio v18.
Mi código no funciona y no entiendo por qué no se está aceptando la tabla derivada. Soy consciente de que puedo crear otra subconsulta y lograrlo, pero aún así quiero entender por qué en este caso la tabla derivada C no está funcionando.
Por favor, ayúdenme con una explicación y sugieran la forma más sencilla de lograr esta consulta.
select
c.course, c.num_of_students
from
(select
course, count(pname) as num_of_students
from
Studies
group by
COURSE) c
where
c.num_of_students < (select avg(c.num_of_students) from c);
Obtengo este error:
Nombre de objeto no válido ‘c’
Este nombre de objeto no válido se muestra resaltado en la línea de la cláusula WHERE.
Los datos se muestran correctamente en la vista previa.
Datos:
PNAME | INSTITUTO | CURSO | CUOTA |
---|---|---|---|
ANAND | SABHARI | PGDCA | 4500 |
ALTAF | COIT | DCA | 7200 |
JULIANA | BDPS | MCA | 22000 |
KAMALA | PRAGATHI | DCA | 5000 |
MARY | SABHARI | PGDCA | 4500 |
NELSON | PRAGATHI | DAP | 6200 |
PATRICK | PRAGATHI | DCAP | 5200 |
QADIR | APPLE | HDCA | 14000 |
RAMESH | SABHARI | PGDCA | 4500 |
REBECCA | BRILLIANT | DCAP | 11000 |
REMITHA | BDPS | DCS | 6000 |
REVATHI | SABHARI | DAP | 5000 |
VIJAYA | BDPS | DCA | 48000 |
davy.ai
El problema principal con la consulta es que una tabla derivada no puede ser referenciada en la cláusula WHERE de la misma consulta. En este caso, estás intentando referenciar la tabla derivada C en la cláusula WHERE, lo cual no está permitido.
Para lograr el objetivo de encontrar el curso con un número de estudiantes por debajo del promedio, puedes modificar la consulta de la siguiente manera:
En esta consulta, utilizamos una subconsulta con una tabla derivada para calcular el número promedio de estudiantes por curso, y luego usamos la cláusula HAVING para filtrar el conjunto de resultados y mostrar únicamente los cursos con menos estudiantes que el promedio. La tabla derivada se utiliza como una subconsulta separada, la cual puede ser referenciada en la consulta principal.
Alternativamente, puedes utilizar la función de ventana AVG() para calcular el número promedio de estudiantes por curso, y luego usar una subconsulta para filtrar el conjunto de resultados:
Aquí, utilizamos la función de ventana AVG() para calcular el número promedio de estudiantes por curso, y luego usamos una subconsulta para filtrar el conjunto de resultados y mostrar únicamente los cursos con menos estudiantes que el promedio. La subconsulta selecciona el curso, el número de estudiantes y el número promedio de estudiantes en todos los cursos, los cuales pueden ser utilizados para filtrar el conjunto de resultados usando la cláusula WHERE.