Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Agrupar ordenados u Ordenar agrupados (https://www.clubdelphi.com/foros/showthread.php?t=52279)

salvica 16-01-2008 13:08:29

Agrupar ordenados u Ordenar agrupados
 
¿podéis decirme como se agrupa una consulta ordenada?

Hago lo siguiente:

Código SQL [-]

{
       TODAS las propiedades agrupadas por TIPO y ordenadas por PROVINCIA, LOCALIDAD, DIRECCION, NUMERo y LETRA
}
SELECT propieda.ID_CLAVE, propieda.TIPO, 
       propieda.DIRECCION, propieda.NUMERO, propieda.PLANTA, propieda.LETRA, 
       propieda.LOCALIDAD, propieda.PROVINCIA, propieda.C_POSTAL,
       propieta.NOMBRE, propieta.APELLIDO_1, propieta.APELLIDO_2
  FROM propieta INNER JOIN (propieda INNER JOIN pertenec ON propieda.ID_CLAVE = pertenec.ID_PROPIED) ON propieta.ID_CLAVE = pertenec.ID_PROPIET
 GROUP BY propieda.TIPO
 ORDER BY propieda.PROVINCIA, propieda.LOCALIDAD, propieda.DIRECCION, propieda.NUMERO, propieda.PLANTA, propieda.LETRA

Siempre me dice que un campo (generalmente el primero del select, pero si lo quito entonces el siguiente) no forma parte del agrupamiento.

Gracias
Salvica

Nelet 16-01-2008 13:17:34

¿Por que agrupas si no tienes ningun agregado en la consulta?. Si no tienes agregados no tiene sentido la claúsula GROUP BY.

salvica 16-01-2008 13:20:16

Cita:

Empezado por Nelet (Mensaje 258427)
¿Por que agrupas si no tienes ningun agregado en la consulta?. Si no tienes agregados no tiene sentido la claúsula GROUP BY.

¿perdón? los del agregados me cae nuevo :o
gracias, salvica

Blackspike 16-01-2008 13:24:22

Para poder hacer una consulta agrupada y ordenada creo recordar que tienes que poner en el group by todos los campos que estas declarando en la select (exceptuando los que sean count,sum...). Despues podras realizar el order by.

Tambien hay que tener en cuenta que si pones algun campo en el order by que no esta declarado en la select, tambien tienes que agregarlo en el group by.

Prueba de esta manera a ver que tal.


Código SQL [-]
{
       TODAS las propiedades agrupadas por TIPO y ordenadas por PROVINCIA, LOCALIDAD, DIRECCION, NUMERo y LETRA
}
SELECT propieda.ID_CLAVE, propieda.TIPO, 
       propieda.DIRECCION, propieda.NUMERO, propieda.PLANTA, propieda.LETRA, 
       propieda.LOCALIDAD, propieda.PROVINCIA, propieda.C_POSTAL,
       propieta.NOMBRE, propieta.APELLIDO_1, propieta.APELLIDO_2
  FROM propieta INNER JOIN (propieda INNER JOIN pertenec ON propieda.ID_CLAVE = pertenec.ID_PROPIED) ON propieta.ID_CLAVE = pertenec.ID_PROPIET
 GROUP BY propieda.ID_CLAVE, propieda.TIPO, 
       propieda.DIRECCION, propieda.NUMERO, propieda.PLANTA, propieda.LETRA, 
       propieda.LOCALIDAD, propieda.PROVINCIA, propieda.C_POSTAL,
       propieta.NOMBRE, propieta.APELLIDO_1, propieta.APELLIDO_2
 ORDER BY propieda.PROVINCIA, propieda.LOCALIDAD, propieda.DIRECCION, propieda.NUMERO, propieda.PLANTA, propieda.LETRA

salvica 16-01-2008 13:40:04

Gracias por la explicación Blackspike, tenía entendido que lo obligatorio era que los campos del GROUP BY formasen parte del SELECT, no que tuviesen que estar todos :o.

Por lo menos funciona y no me da error :). Ahora tengo que ver lo que le pasa al informe.

De nuevo gracias
salvica

ContraVeneno 16-01-2008 15:50:16

mas bien habría que concentrarse en la pregunta que te hizo Nelet.

No tiene sentido utiliza un "group by" si no vas a utilizar funciones de agregados, es decir: SUM, AVG, COUNT, MAX, MIN, etc, etc

Si por ejemplo, tienes varios registros de una misma localidad y lo que quieres es que muestre solo uno, en lugar de agruparlos, podrías utilizar la cláusula "DISTINCT".

En fin, como ya dijo Nelet, no tiene sentido agrupar, si no vas a agregar.

salvica 16-01-2008 22:41:17

Cita:

Empezado por ContraVeneno (Mensaje 258470)
mas bien habría que concentrarse en la pregunta que te hizo Nelet.

No tiene sentido utiliza un "group by" si no vas a utilizar funciones de agregados, es decir: SUM, AVG, COUNT, MAX, MIN, etc, etc

Si por ejemplo, tienes varios registros de una misma localidad y lo que quieres es que muestre solo uno, en lugar de agruparlos, podrías utilizar la cláusula "DISTINCT".

En fin, como ya dijo Nelet, no tiene sentido agrupar, si no vas a agregar.

Hola ContraVeneno, bienvenido al debate.

Depués de lo que estoy "escuchando" creo que voy a tener que reciclarme :o.

No estoy intentando agregar nada, solo sacar un listado de propiedades agrupadas por TIPO, dentro de cada tipo agrupadas PROVINCIA y dentro de estas por LOCALIDAD.

Según el manual del QReport debo incluir una banda de grupo (TQrGroupBand creo que se llama) y en la propiedad Expression poner los campos de agrupamiento.

Con respecto al SQL, que es lo que se trata aquí, tenía entendido que los campos del GROUP BY tenían que estar definidos en la SELECT, no que todos los campos de la SELECT tienen que estar en el ORDER BY, de ahí mi ignorancia en el error que me daba el programa :o

Saludos
salvica

ContraVeneno 16-01-2008 23:40:41

Bueno, es que ahora estamos entrando en otra cosa.

Si lo que quieres es ir agrupando en el Quickreport, lo mejor será que tu consulta SQL no este agrupada. Y dejarías que Quickreporte se encargue de hacer las agrupaciones necesarias.

Y como te había mencionado, en SQL para obtener lo que necesitas, en lugar de utilizar "Group By", sería más fácil utilizar la cláusula "DISTINCT"

salvica 16-01-2008 23:53:15

Cita:

Empezado por ContraVeneno (Mensaje 258701)
Bueno, es que ahora estamos entrando en otra cosa.

Si lo que quieres es ir agrupando en el Quickreport, lo mejor será que tu consulta SQL no este agrupada. Y dejarías que Quickreporte se encargue de hacer las agrupaciones necesarias.

Y como te había mencionado, en SQL para obtener lo que necesitas, en lugar de utilizar "Group By", sería más fácil utilizar la cláusula "DISTINCT"

Hola ContraVeneno
Es que el DISTINCT no me vadria, ya que si (por ejemplo) tengo cuatro propiedades de tipo vivienda en Madrid (provincia) Madrid (ciudad) y dos están en la calle Pérez Pastor (una en el cuarto y otra en el octavo) solo sacaría una, mientras que lo que necesito es me saque las cuatro del tipo vivienda, eso sí, ordenadas por la provincia y la localidad

jachguate 17-01-2008 00:38:35

Si no te vale el distinct, tampoco te vale el group by... no es necesario.

Hasta luego.

;)

salvica 17-01-2008 11:31:52

Cita:

Empezado por jachguate (Mensaje 258715)
Si no te vale el distinct, tampoco te vale el group by... no es necesario.

Hasta luego.

;)

Hola jachguate.

Si, el problema es mio, de conceptos :(.

No sé porqué, me estaba "emperrando" en agrupar la consulta, cuando lo único que tengo que hacer es ordenarla y dejar a QReport que se encargue del agrupamiento, como bién dice ContraVeneno estoy mezclando churras con merinas :rolleyes:

Agradecido a todos los contribuyentes en ampliar conocimientos
Salvica


La franja horaria es GMT +2. Ahora son las 16:27:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi