SQL - Ayuda con GROUP BY

   
Vista:

Ayuda con GROUP BY

Publicado por Ana (1 intervención) el 05/01/2012 15:07:49
Hola!
Me encontraba intentando terminar una practica de clase. Estudio un FP a distancia y entre el contenido escaso de algunos temas importantes y la distancia es complicado enterarse de algunas cosillas.

Tengo una practica en la cual, debo sacar los datos que ahora vereis en la select.
Bien, mi problema surge cuando intento agrupar por el campo a.titulo (campo titulo de la tabla ACTIVIDADES ).

No se que estoy hacendo mal, la verdad es que estoy bastante verde con el tema de las agrupaciones...
Si alguien pudiese ayudarme, seria un gran consuelo para mi :(

Esta es la consulta que si funciona:

select a.titulo as Actividad, m.nombre ||' '|| m.apellidos as Nombre_Apellidos_Monitor, i.situacion as Situacion, a.equipobasico as Equipo_Basico,(select s.nombre ||' '|| s.apellidos
from socios s
where p.idsocio =s.idsocio) as Nombre_Apellidos_Socio"
from monitores m, actividades a, instalaciones i, grupos g, participa p
where m.idmonitor = g.idmonitor and
i.codigoinstalacion = g.codigoinstalacion and
a.cosactividad= g.cosactividad and
p.idgrupo = g.idgrupo
order by a.titulo


Bien, el problema me surge al poner el group by, que yo lo haso asi (mas, segurisimo):

Group by a.titulo.


Intente poner todos los campos que recuperaba en la fila de la select, pero el problema continuaba ya que el group by no reconocer las subconsultas.

Y otra duda mas, es posible incluir un "order by s.apellidos" a la subconsulta de la select?
Es que probe y tampoco me deja.

Deben ser fallos tntos, pero como comento, estoy bastante verde y perdida... si alguien me puede ayudar, seria de gran ayuda!!

Un saludo
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

Ayuda con GROUP BY

Publicado por leonardo_josue (877 intervenciones) el 05/01/2012 16:52:10
Hola Ana...

Como bien comentas, hay varios detalles que hay que tomar en cuenta para poder ayudarte. En primer lugar, no nos dices con qué BD estás trabajando. He insistido muchas veces en este mismo foro que este dato es muy importante, pues aunque todos los motores utilizan SQL, la sintaxis es diferente para cada uno de ellos. por la consulta podría pensar que estás trabajando con ORACLE, pero eso deberías aclararlo.

Ahora si, entrando en materia, hay varios detalles que tienes que considerar.

1. Una subconsulta utilizada en la parte del select (como lo es Nombre_Apellidos_Socio) NO DEBE REFRESAR MÁS DE UN REGISTRO, Si la subconsulta te regresa múltiples registros la consulta marcará un error.

2. El uso de agrupaciones (GROUP BY) está asociado al uso de funciones de agrupación (COUNT, SUM, MAX, MIN, AVG, etc.) En tu caso no veo que estés utilizando ninguna de estas funciones, por lo tanto no estoy seguro de qué es lo que quieres hacer.

3. Cuando utilices múltiples tablas en una consulta, es mejor utilizar JOIN's, en lugar de hacer las uniones en el WHERE, es decir

1
2
3
4
5
6
7
en lugar de hacer esto:
 
FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo
 
haz esto:
 
FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo


Aunque el resultado es el mismo, el rendimiento es superior con los JOINS. Si no sabes cómo funcionan los JOINS, preguntale a SANTA WIKIPEDIA.

http://es.wikipedia.org/wiki/Join

4. Cuando tienes un select con múltiples campos seleccionados (SELECT) y quieres utilizar la cláusula GROUP BY, debes incluir TODOS LOS CAMPOS SELECCIONADOS en el group by, exceptuando aquellos que estén asociados a funciones de agregación. Esto sería bastante complicado de explicar, pero sería más o menos así.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT COUNT(id) FROM tabla
--> correcto, no se selecciona ningún campo sin asociarse a funciones de agregación
y no hay sección GROUP BY
 
SELECT id, count(id)  FROM tabla
--Incorrecto, en el select se selecciona el campo ID sin estar asociado a ninguna
función de agregación (aunque aparezca en el count), por lo tanto debería aparecer
en el GROUP BY
 
SELECT id, count(id) FROM tabla GROUP BY id
-->Correcto, es la manera como debería quedar la consulta anterior.
 
SELECT id, campo, count(*) FROM tabla GROUP BY id, campo
--> Correcto, observa que todos los campos que se listaron en el select
aparecen en GROUP BY


Te repito que este tema es bastante extenso como para tratarlo en un solo posty puede resultar complicado aprender algo sin la ayuda de una persona que te asesore. Comienza con cosas sencillas, busca algún manual de SQL para principiantes y bueno, aquí están los foros para tratar de ayudar.

Saludos
Leo
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