SQL - Subquerys y un poco de lio

 
Vista:
sin imagen de perfil

Subquerys y un poco de lio

Publicado por Cristian (4 intervenciones) el 10/09/2015 09:15:30
Hola buenos días!

Estoy tratando de hacer una consulta en una base de datos(moodle) para recoger mas o menos lo siguiente:

1
2
3
4
5
6
Nombre                              Porcentaje              Asistentes
---------------------------------------------------------------------------------------------
Curso1                                  80%                         214
Curso2                                  15%                          21
Curso3                                   3%                           5
Curso4                                   2%                           3

De momento estoy sacando los cursos de una categoría y los asistentes es donde estoy teniendo problemas.

La consulta que estoy haciendo es esta:

1
2
3
4
5
6
7
select C.fullname,C.id as idEsp,(
	select count(*) as Participantes from (
		select count(*) from aulavirtual.mdl_log
			where course = 46
				and action = "view" and module = "course" group by userid
	) as Datos
) as Asistentes from mdl_course C where category = 2;

El problema que tengo es que no tengo que poner esto:

1
2
3
4
5
6
7
select C.fullname,C.id as idEsp,(
	select count(*) as Participantes from (
		select count(*) from aulavirtual.mdl_log
			where course = 46  
				and action = "view" and module = "course" group by userid
	) as Datos
) as Asistentes from mdl_course C where category = 2;

Debería de ser where course = a la id de arriba(la que esta subrayada), pero no consigo acceder a ella.

¿Alguna idea?

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Subquerys y un poco de lio

Publicado por Cristian (4 intervenciones) el 10/09/2015 11:03:09
Lo primero perdón y dar las gracias al moderador o administrador que haya editado el post para que sea mas legible.

Creo que lo tengo solucionado, pero al modo 'chapuzas' porque si le pongo una categoría (entendamos categoría como que una categoría puede tener 0 a * cursos) que tiene muchos cursos el programa(Workbench) se me queda pillado.

La consulta que tengo ahora mismo es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
select L.course as 'Id de curso',C.fullname as 'Nombre de curso',(
		SELECT count(*) FROM mdl_log
		where course = L.course and module = "course" and userid <> 2
	 ) as 'Numero de accesos'
	 ,(CONCAT(ROUND(
		(((SELECT count(*) FROM mdl_log
			where course = L.course and module = "course" and userid <> 2 ) *100)/(select count(*) from mdl_log
				where course IN (SELECT id FROM aulavirtual.mdl_course where category = C.category)
			and action = "view" and module = "course" and userid <> 2))
	,0),'%')) as Porcentaje
from mdl_course C
inner join mdl_log L ON L.course = C.id
where category = 2
group by course;

¿Alguien me podría decir si hay alguna manera de 'mejorar' o 'agilizar' dicha consulta?

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 109
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Subquerys y un poco de lio

Publicado por Rafael (111 intervenciones) el 10/09/2015 12:07:45
Hola:

El Moodle lo tienes instalado sobre que base de datos???
oracle, Sql Server, My SQL ???

Vaya que hay forma si que la hay pero depende de la base de datos que ocupes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Subquerys y un poco de lio

Publicado por Cristian (4 intervenciones) el 10/09/2015 12:49:32
Hola rafael, es un mysql, se me pasó comentarlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Subquerys y un poco de lio

Publicado por Cristian (4 intervenciones) el 11/09/2015 08:37:17
Bueno pues despues de estar comiendome la cabeza y tener que llamar a un compañero para que me aclarara las cosas, la consulta sería la siguiente:

1
2
3
4
5
6
7
8
9
10
11
select L.course as 'Id de curso',C.fullname as 'Nombre de curso', count(*) as 'Numero de accesos'
	 ,(CONCAT(ROUND(
		(((count(*)) *100)/(select count(*) from mdl_log LO
				where course IN (SELECT id FROM aulavirtual.mdl_course COU where category = C.category
					and COU.id = LO.course)
			and action = "view" and module = "course" and userid <> 2 ) )
	 ,0),'%')) as Porcentaje
from mdl_course C
inner join mdl_log L ON L.course = C.id
where category = 2 and module = "course" and userid <> 2 and action = "view"
group by course;
Gracias y saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar