Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Uso de COUNT y quinto superior

Estas en el tema de Uso de COUNT y quinto superior en el foro de SQL Server en Foros del Web. Hola gente de esta maravillosa comunidad, una vez más vengo por ayuda y espero que puedan brindármela. Teniendo la siguiente tabla ID_ALUMNO --- Nombre --- ...
  #1 (permalink)  
Antiguo 02/12/2014, 22:14
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 5 meses
Puntos: 0
Pregunta Uso de COUNT y quinto superior

Hola gente de esta maravillosa comunidad, una vez más vengo por ayuda y espero que puedan brindármela.

Teniendo la siguiente tabla

ID_ALUMNO --- Nombre --- Semestre --- Promedio
01 ----------- Juan ------ 1 ---------- 16.74
02 ----------- John ------ 1 ---------- 15.07
03 ----------- Pepe ----- 1 ---------- 14.32
04 ----------- Carlos ---- 1 ---------- 12.29
05 ----------- Cesar ---- 1 ---------- 12.00
06 ----------- Peter ---- 2 ---------- 15.00
07 ----------- Max ---- 2 ---------- 14.00
08 ----------- Jorge ---- 2 ---------- 17.00
...

Quisiera hallar el quinto superior (siendo este el "total de alumnos/5"). Para ello usé la clausula COUNT para saber el número de alumnos de un determinado semestre, para luego dividirlo entre 5.
Ahora quiero mostrar los primeros xxx alumnos que están dentro de este quinto superior

Código SQL:
Ver original
  1. DECLARE @var1 INT
  2. SET @var1 = (SELECT COUNT(semestre)/5 FROM Alumno WHERE Alumno.semestre=1)
  3.  
  4. SELECT top (@var1) * FROM Alumno
  5. WHERE Alumno.semestre = 1
  6. ORDER BY Promedio DESC

Usando ese código he logrado mostrar los primeros xxx alumnos pero solo del semestre "1", y lo que busco es mostrar también los de "2" semestre, intenté usar la CLAUSULA UNION, pero debido al ORDER BY, no me deja, así que al final realicé lo siguiente:

Código SQL:
Ver original
  1. DECLARE @var1 INT, @var2 INT
  2. SET @var1 = (SELECT COUNT(semestre)/5 FROM Alumno WHERE Alumno.semestre=1)
  3. SET @var2 = (SELECT COUNT(semestre)/5 FROM Alumno WHERE Alumno.semestre=2)
  4.  
  5. SELECT top (@var1) * FROM Alumno
  6. WHERE Alumno.semestre = 1
  7. UNION
  8. SELECT top (@var2) * FROM Alumno
  9. WHERE Alumno.semestre = 2
  10. ORDER BY Promedio DESC

Pero el resultado no es el que debería, espero puedan ayudarme a encontrar una forma de realizar la consulta que estoy buscando.
  #2 (permalink)  
Antiguo 02/12/2014, 23:19
Avatar de anserk  
Fecha de Ingreso: noviembre-2014
Mensajes: 9
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Uso de COUNT y quinto superior

Lo he solucionado, pero quizá de la forma incorrecta, aunque la respuesta es la que estoy buscando

Código SQL:
Ver original
  1. DECLARE @var1 INT, @var3 INT, @var5 INT
  2. SET @var1 = (SELECT COUNT(semestre)/5 FROM Promedio WHERE Alumno.semestre=1)
  3. SET @var3 = (SELECT COUNT(semestre)/5 FROM Promedio WHERE Alumno.semestre=3)
  4. SET @var5 = (SELECT COUNT(semestre)/5 FROM Promedio WHERE Alumno.semestre=5)
  5. SELECT id_alumno, nombre, semestre, Promedio
  6. FROM (SELECT TOP(@var1) id_alumno, nombre, semestre, Promedio
  7.       FROM Alumno
  8.       WHERE semestre = 1
  9.       ORDER BY promedio DESC) AS a
  10. UNION ALL
  11. SELECT id_alumno, nombre, semestre, Promedio
  12. FROM (SELECT TOP(@var3) id_alumno, nombre, semestre, Promedio
  13.       FROM Alumno
  14.       WHERE semestre = 3
  15.       ORDER BY promedio DESC) AS b
  16. UNION ALL
  17. SELECT id_alumno, nombre, semestre, Promedio
  18. FROM (SELECT TOP(@var5) id_alumno, nombre, semestre, Promedio
  19.       FROM Alumno
  20.       WHERE semestre = 5
  21.       ORDER BY promedio DESC) AS c;

Etiquetas: count, select, siguiente, superior, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:45.