Agrupar registros por un solo campo en SQL.

1,183 views
Skip to first unread message

Ultraton500

unread,
Feb 23, 2021, 4:13:46 AM2/23/21
to Comunidad de Visual Foxpro en Español
Buen día a todos!
Para obtener la cantidad de ventas por cliente mostradas en la tabla "A" una consulta SQL sería así:
SELECT id_clie, COUNT(id_clie) AS cantidad FROM ventas GROUP BY id_clie
Ejemplo GROUP BY_a.jpg
Si quiero agregar mas campos a la lista de selección también debo agregarlos a los campos de agrupamiento pero, como se ve en la tabla "B", ya no quedan agrupados por cliente. En este caso la consulta SQL sería la siguiente:

SELECT id_clie, nombre_clie, id_rubro, nombre_rubro, nro_venta, COUNT(id_clie) AS cantidad FROM (ventas INNER JOIN clientes ON ventas.cliente=clientes.id_clie) INNER JOIN rubros ON ventas.rubro=rubros.id_rubro GROUP BY id_clie, nombre_clie, id_rubro, nombre_rubro, nro_venta
Ejemplo GROUP BY_b.jpg
La pregunta entonces es: Cómo sería la consulta SQL para obtener la tabla "C", es decir, varios campos pero agrupando los registros solo por cliente (sin usar SET ENGINEBEHAVIOR).
Ejemplo GROUP BY_c.jpg
Desde ya muy agradecido por sus comentarios.

Saludos cordiales.
Javier Pérez.

Francisco Lorente

unread,
Feb 23, 2021, 4:23:58 AM2/23/21
to Comunidad de Visual Foxpro en Español
Hola, Javier.

Prueba con:

SELECT id_clie, nombre_clie, id_rubro, nombre_rubro, nro_venta, COUNT(1) AS cantidad FROM (ventas INNER JOIN clientes ON ventas.cliente=clientes.id_clie) INNER JOIN rubros ON ventas.rubro=rubros.id_rubro GROUP BY id_clie

Saludos.
Francisco Lorente.
Murcia. España.

Ultraton500

unread,
Feb 23, 2021, 3:36:43 PM2/23/21
to Comunidad de Visual Foxpro en Español
Hola Francisco. Gracias por responder.

Para que funcione lo que sugieres debe hacerse antes un SET ENGINEBEHAVIOR 70 que es lo que hago en VFP, pero como debo migrar la consulta a otro lenguaje eso no puede hacerse y debo ajustarme a los estándares de SQL que establecen que los campos de la lista de agrupamiento deben ser los mismos que la lista de selección.

Me extraña no poder encontrar referencias porque lo que necesito hacer es un requerimiento habitual. Hay muchos ejemplos al respecto pero todos son con un solo campo.

Saludos.
Javier Pérez.

GeoSys Diseño de Software

unread,
Feb 23, 2021, 3:56:27 PM2/23/21
to Comunidad de Visual Foxpro en Español
Y si utilizas MAX() para los campos que no van a formar parte del agrupamiento...



--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/1ed8018c-8564-4c05-bcb7-0cd91f795e2an%40googlegroups.com.

Ultraton500

unread,
Feb 23, 2021, 4:20:39 PM2/23/21
to Comunidad de Visual Foxpro en Español
Hola, gracias por el aporte.

Entiendo y es interesante la idea pero lamentablemente MAX( ) produce un error si se utiliza sobre un campo de tipo texto.

Saludos.
Javier.

Message has been deleted

alvarocastellar

unread,
Feb 23, 2021, 5:42:59 PM2/23/21
to Comunidad de Visual Foxpro en Español
Hola amigo....   el count debe ir sobre la tabla que contiene el detalle, la cantidad de ventas :

Hola amigo....   el count debe ir sobre la tabla que contiene el detalle, la cantidad de ventas :

SELECT id_clie, nombre_clie, id_rubro, nombre_rubro, nro_venta, COUNT(Ventas.Cliente) AS cantidad 
FROM ( Clientes  INNER JOIN ventas  ON clientes.Id_Clie = ventas.cliente) 
   INNER JOIN rubros ON ventas.rubro=rubros.id_rubro 
    GROUP BY Clientes.id_clie

Prueblo de esta forma  a ver como te va 

Saludos 

Víctor Hugo Espínola Domínguez

unread,
Feb 23, 2021, 5:52:40 PM2/23/21
to publice...@googlegroups.com
https://vfpavanzado.wordpress.com/2018/08/17/de-dbf-a-sql-15-usando-subconsultas/ ahí hay 3 artículos sobre el tema.

Saludos,
Víctor.
Lambaré - Paraguay.



--

Ultraton500

unread,
Feb 24, 2021, 2:15:54 AM2/24/21
to Comunidad de Visual Foxpro en Español
Hola Alvaro.

Efectivamente así lo hago, el campo "id_clie" sobre el que aplico el COUNT( ) pertenece a la tabla ventas. Debí haber antepuesto a cada campo el nombre de la tabla para evitar confusión.

Saludos y gracias por la ayuda.
Javie.

Ultraton500

unread,
Feb 24, 2021, 2:44:01 AM2/24/21
to Comunidad de Visual Foxpro en Español
Perdón Alvaro, me faltó aclarar que lo que está mal es  ON ventas.cliente=clientes.id_clie 

Debí haber puesto ON ventas.id_clie=clientes.id_clie  y antepuesto el nombre de la tabla "ventas" al campo "id_clie" en toda la consulta.

Saludos!

Víctor Hugo Espínola Domínguez

unread,
Feb 24, 2021, 8:43:57 AM2/24/21
to publice...@googlegroups.com
No sé si ya resolviste el problema, adjunto un ejemplo sencillo usando sub consulta.

Saludos,
Víctor.
Lambaré - Paraguay.


--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
cantventascliente.prg

Ultraton500

unread,
Feb 24, 2021, 2:11:24 PM2/24/21
to Comunidad de Visual Foxpro en Español
Hola Víctor... Gracias por la ayuda.

Perdón que no te he contestado, ayer estuve viendo el artículo que me indicaste y recién ahora estoy pudiendo ponerme a hacer pruebas así que el código de ejemplo me es de gran utilidad. Pruebo y comento.

Saludos.
Javier.

Reply all
Reply to author
Forward
0 new messages