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

Group by & order by con una consulta (query) que incluye una union

Estas en el tema de Group by & order by con una consulta (query) que incluye una union en el foro de Mysql en Foros del Web. Hola que tal compañeros escribo esta petición por si me pueden ayudar con una consulta que no puedo hacer funcionar al 100%.... Les comento la ...
  #1 (permalink)  
Antiguo 26/01/2012, 21:59
 
Fecha de Ingreso: enero-2012
Mensajes: 9
Antigüedad: 12 años, 3 meses
Puntos: 0
Mensaje Group by & order by con una consulta (query) que incluye una union

Hola que tal compañeros escribo esta petición por si me pueden ayudar con una consulta que no puedo hacer funcionar al 100%....

Les comento la situación.

Tengo las siguientes tablas:

1.-Alumnos-------------> (matricula,id_plan)

2.-Historial Academico--> (matricula,id_plan,id_materia,calificaciones)

3.-Materias------------->(id_materia,id_plan,nombre_materia,cuatrimestre,o rden_cuatrimestre,id_cup)

4.-Plan de Estudios----->(id_plan)

La relacion pues cada campo que tienen el mismo nombre
(ojo de la tabla materia el id_cup no es un identificador solo es un dato de la materia, los importantes de la tabla materias son todos menos ese, ese dato solo lo uso para mostrarlo pero no lo uso como identidicador)..:)

Relaciones:

*Un alumno esta inscrito en un plan de estudios
*Un plan de estudios tiene unas materias ordenadas por cuatrimestre asu vez
*Las materias corresponden a un plan (que es lo mismo que la linea anterior pero inverso)
*El historial academico almacena las "calificaciones" por "matricula" (identificador del alumno). y únicamente las que tienen "calificaciones"

Bueno ahora, lo que tengo que realizar

Un query (consulta) que me muestre todas las materias por alumno las que
esten en la tabla de "historial academico" con calificaciones y las que esten en la tabla materias que corresponden a un mismo plan al que pertenece un alumno pero que aun no ha cursado(es decir que no tienen "calificacion")...

En pocas palabras mostrar las calificaciones que tengan calificacion y las que no
pero ordenadas por el cuatrimestre y orden cuatrimestre.

Tengo dos querys los cuales (uní)
y me trae esos registros pero marca errores al aplicar las sentencias de
GROUP BY nombre_materia
ORDER BY cuatrimestre

Este query me trae las que tienen evaluaciones (de la tabla historial academico)


Código:
SELECT c.id_cup,c.nombre_materia,b.calificaciones,c.id_materia 
FROM alumnos a,historial_academico b,materias c
WHERE a.matricula=b.matricula
AND a.id_plan=b.id_plan
AND b.id_plan=c.id_plan
AND b.id_materia=c.id_materia
AND a.matricula =300
AND c.orden_cuatrimestre=6
GROUP BY nombre_materia
ORDER BY cuatrimestre

Este otro las que no ha cursado (de la tabla materias)

Código:
SELECT id_cup,nombre_materia,'0',id_materia
                                    FROM materias 
                                    WHERE id_materia 
                                    NOT IN (SELECT id_materia 
                                    FROM historial_academico 
                                    WHERE matricula = 300) 
                                    AND id_plan=(SELECT a.id_plan 
                                    FROM plan_estudios AS a,alumnos AS b 
                                    WHERE a.id_plan = b.id_plan AND b.matricula = 300)
                                    AND orden_cuatrimestre=6
                                    GROUP BY nombre_materia
                                    ORDER BY cuatrimestre

Ahora si uso la sentencia UNION si me trae los registros pero no se donde aplicar
las sentencias

GROUP BY nombre_materia
ORDER BY cuatrimestre

Todo lo que me traiga(solo son 8 registros del primer query y 1 registro del segundo query)
Ya unidos pues 9 pero tengo que a agrupar y ordenar los 9 registros por esos campos
o atributos.

aqui les dejo el query en el que uno los dos.....

Código:
(SELECT c.id_cup,c.nombre_materia,b.calificaciones,c.id_materia 
FROM alumnos a,historial_academico b,materias c
WHERE a.matricula=b.matricula
AND a.id_plan=b.id_plan
AND b.id_plan=c.id_plan
AND b.id_materia=c.id_materia
AND a.matricula =300
AND c.orden_cuatrimestre=6
GROUP BY nombre_materia
ORDER BY cuatrimestre) UNION (SELECT id_cup,nombre_materia,'0',id_materia
                                    FROM materias 
                                    WHERE id_materia 
                                    NOT IN (SELECT id_materia 
                                    FROM historial_academico 
                                    WHERE matricula = 300) 
                                    AND id_plan=(SELECT a.id_plan 
                                    FROM plan_estudios AS a,alumnos AS b 
                                    WHERE a.id_plan = b.id_plan AND b.matricula = 300)
                                    AND orden_cuatrimestre=6
                                    GROUP BY nombre_materia
                                    ORDER BY cuatrimestre)
Saludos por favor si me pueden ayudar se los agradeceria mucho, gracias de antemano..
  #2 (permalink)  
Antiguo 27/01/2012, 07:36
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Group by & order by con una consulta (query) que incluye una union

No entendí mucho de lo que escribiste xD! pero me parece que lo que quieres es esto

Código MySQL:
Ver original
  1. SELECT campos
  2.     (SELECT ..... FROM ...... WHERE ......
  3.      UNION
  4.      SELECT ..... FROM ...... WHERE ......)
  5. .......
  6. GROUP BY campo1
  7. ORDER BY campo2


Saludos, ojala sea a lo que te referías xD!
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)

Etiquetas: order-by, jquery-mobile
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 01:43.