Ayuda para sacar promedio

25/10/2005 - 02:06 por Matías L | Informe spam
Hola a todos, tengo una tabla de Calificaciones de alumnos(Notas),
quisiera obtener las notas de cada alumno para un determinado curso y
materia, con su respectivo promedio, lo
que no me sale es el promedio correspondiente a cada alumno:

CREATE TABLE [dbo].[Notas] (
[IDAlumno] [int] NOT NULL ,
[IDMateria] [smallint] NOT NULL ,
[IDEtapa] [smallint] NOT NULL ,
[Curso] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Orden] [int] IDENTITY (1, 1) NOT NULL ,
[Nota] [smallint] NOT NULL ,
[FechaExamen] [smalldatetime] NULL
) ON [PRIMARY]
GO

SELECT N.IDAlumno, N.IDMateria, N.IDEtapa, N.Nota,
Promedio = (SELECT ROUND(AVG(CAST(N.Nota as FLOAT)),2)
FROM NOTAS N
WHERE N.CURSO = '1AM' AND N.IDEtapa = 1 AND N.IDMateria = 4)
FROM NOTAS N
WHERE N.CURSO = '1AM' AND N.IDEtapa = 1 AND N.IDMateria = 4
ORDER BY N.IdAlumno, N.IDEtapa

el select devuelve:

IDAlumno IDMateria IDEtapa Nota Promedio
2 4 1 7 6.54
2 4 1 10 6.54
2 4 1 7 6.54
3 4 1 1 0 6.54
3 4 1 5 6.54
3 4 1 6 6.54

No se como calcular la columna Promedio, Me hace falta:
IDAlumno IDMateria IDEtapa Nota Promedio
2 4 1 7 8
2 4 1 10 8
2 4 1 7 8
3 4 1 10 7
3 4 1 5 7
3 4 1 6 7

Saludos y mil gracias.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
25/10/2005 - 02:59 | Informe spam
Matías L,

Te falta correlacionar por IDAlumno.

SELECT
N.IDAlumno, N.IDMateria, N.IDEtapa, N.Nota,
Promedio = (
SELECT ROUND(AVG(CAST(N2.Nota as FLOAT)),2)
FROM NOTAS N2
WHERE
N2.CURSO = N1.CURSO
AND N2.IDEtapa = N1.IDEtapa
AND N2.IDMateria = N1.IDMateria
AND N2.IdAlumno = N1.IdAlumno
)
FROM NOTAS N1
WHERE N1.CURSO = '1AM' AND N1.IDEtapa = 1 AND N1.IDMateria = 4
ORDER BY N1.IdAlumno, N1.IDEtapa
go


AMB

"Matías L" wrote:

Hola a todos, tengo una tabla de Calificaciones de alumnos(Notas),
quisiera obtener las notas de cada alumno para un determinado curso y
materia, con su respectivo promedio, lo
que no me sale es el promedio correspondiente a cada alumno:

CREATE TABLE [dbo].[Notas] (
[IDAlumno] [int] NOT NULL ,
[IDMateria] [smallint] NOT NULL ,
[IDEtapa] [smallint] NOT NULL ,
[Curso] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Orden] [int] IDENTITY (1, 1) NOT NULL ,
[Nota] [smallint] NOT NULL ,
[FechaExamen] [smalldatetime] NULL
) ON [PRIMARY]
GO

SELECT N.IDAlumno, N.IDMateria, N.IDEtapa, N.Nota,
Promedio = (SELECT ROUND(AVG(CAST(N.Nota as FLOAT)),2)
FROM NOTAS N
WHERE N.CURSO = '1AM' AND N.IDEtapa = 1 AND N.IDMateria = 4)
FROM NOTAS N
WHERE N.CURSO = '1AM' AND N.IDEtapa = 1 AND N.IDMateria = 4
ORDER BY N.IdAlumno, N.IDEtapa

el select devuelve:

IDAlumno IDMateria IDEtapa Nota Promedio
2 4 1 7 6.54
2 4 1 10 6.54
2 4 1 7 6.54
3 4 1 1 0 6.54
3 4 1 5 6.54
3 4 1 6 6.54

No se como calcular la columna Promedio, Me hace falta:
IDAlumno IDMateria IDEtapa Nota Promedio
2 4 1 7 8
2 4 1 10 8
2 4 1 7 8
3 4 1 10 7
3 4 1 5 7
3 4 1 6 7

Saludos y mil gracias.





Respuesta Responder a este mensaje
#2 Isaias
25/10/2005 - 03:19 | Informe spam
Creo que

create table #notas (IDAlumno int, IDMateria int,IDEtapa int, Nota int)
GO
insert into #notas values(2,4,1,7)
insert into #notas values(2,4,1,10)
insert into #notas values(2,4,1,7)
insert into #notas values(3,4,1,10)
insert into #notas values(3,4,1,5)
insert into #notas values(3,4,1,6)
GO
SELECT #notas.IDAlumno, IDMateria, IDEtapa, Nota, (X.notas/X.regs) as
Promedio
FROM #notas JOIN (SELECT IDAlumno, COUNT(IDAlumno) as regs, SUM(Nota) as
notas FROM #notas GROUP BY IDAlumno) AS X
ON #notas.IDAlumno = x.IDAlumno
GO
drop table #notas


Saludos
IIslas


"Matías L" escribió:

Hola a todos, tengo una tabla de Calificaciones de alumnos(Notas),
quisiera obtener las notas de cada alumno para un determinado curso y
materia, con su respectivo promedio, lo
que no me sale es el promedio correspondiente a cada alumno:

CREATE TABLE [dbo].[Notas] (
[IDAlumno] [int] NOT NULL ,
[IDMateria] [smallint] NOT NULL ,
[IDEtapa] [smallint] NOT NULL ,
[Curso] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Orden] [int] IDENTITY (1, 1) NOT NULL ,
[Nota] [smallint] NOT NULL ,
[FechaExamen] [smalldatetime] NULL
) ON [PRIMARY]
GO

SELECT N.IDAlumno, N.IDMateria, N.IDEtapa, N.Nota,
Promedio = (SELECT ROUND(AVG(CAST(N.Nota as FLOAT)),2)
FROM NOTAS N
WHERE N.CURSO = '1AM' AND N.IDEtapa = 1 AND N.IDMateria = 4)
FROM NOTAS N
WHERE N.CURSO = '1AM' AND N.IDEtapa = 1 AND N.IDMateria = 4
ORDER BY N.IdAlumno, N.IDEtapa

el select devuelve:

IDAlumno IDMateria IDEtapa Nota Promedio
2 4 1 7 6.54
2 4 1 10 6.54
2 4 1 7 6.54
3 4 1 1 0 6.54
3 4 1 5 6.54
3 4 1 6 6.54

No se como calcular la columna Promedio, Me hace falta:
IDAlumno IDMateria IDEtapa Nota Promedio
2 4 1 7 8
2 4 1 10 8
2 4 1 7 8
3 4 1 10 7
3 4 1 5 7
3 4 1 6 7

Saludos y mil gracias.





Respuesta Responder a este mensaje
#3 Matías L
25/10/2005 - 04:35 | Informe spam
Muchas gracias, Alejandro e Isaias.
Saludos desde Córdoba, Argentina.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida