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

[SOLUCIONADO] Consulta para agrupar algunos resultados y otros no

Estas en el tema de Consulta para agrupar algunos resultados y otros no en el foro de Mysql en Foros del Web. Hola a todos. Hace tiempo que no pedia ayuda posteando un nuevo tema, y creo que de MySQL es el primero, los otros fueron de ...
  #1 (permalink)  
Antiguo 31/07/2013, 08:53
 
Fecha de Ingreso: junio-2004
Mensajes: 11
Antigüedad: 20 años, 4 meses
Puntos: 0
Consulta para agrupar algunos resultados y otros no

Hola a todos.

Hace tiempo que no pedia ayuda posteando un nuevo tema, y creo que de MySQL es el primero, los otros fueron de PHP, me gusta buscar la solucion en temas anteriores, sin embargo, el dia de hoy vengo con una solicitud de apoyo ya que no se ni siquiera como buscar una solucion; anduve navegando por los temas de esa seccion pero no encontre lo que queria, les explico.

Estoy haciendo una solucion para una empresa que compra y vende chatarra, el desarrollo que estoy haciendo es exclusivamente en el area de compra de chatarra. Bueno, en esta empresa tienen varias categorias de proveedores de chatarra en las cuales lo que varia es el precio y pues tienen varios tipos de chatarra que compran (primera, segunda, fierro vaciado y lamina); dentro de las categorias, hay una que se llama "Publico en General" que es para personas que no tienen antecedentes de venta para con ellos, de los que van una sola vez y no regresan, a todos ellos los agrupan bajo el grupo de "Publico" (y quedan grabados para futuras compras) y se almacena la compra bajo el nombre del proveedor.

Bueno ahora mi problema; estoy haciendo un filtro donde se seleccionen 2 fechas y se obtenga el total comprado por tipo de chatarra entre esas fechas y ademas, quienes fueron los proveedores y cuanto trajeron, esto ya lo tengo y creo que funciona bien, el detalle es que quiero ademas, que todos los proveedores bajo la categoria "Publico" sean conjuntados (se sumen sus ventas) y aparezcan solamente como "Publico" y no cada uno con su nombre; el resto de los proveedores que no estan en esta categoria, si apareceran con el nombre y la suma de sus ventas, solamente se agruparan las ventas de todos los de la categoria "Publico" y como tal apareceran.

Con este codigo saco cada proveedor (no publico) y su total de ventas.

Código:
SELECT compras.nombre,SUM(compras.lamina) AS total, FROM `compras` INNER JOIN `provedores` ON compras.nombre=provedores.nombre WHERE compras.fechayhora BETWEEN '2013/07/01' AND '2013/07/30' AND provedores.categoria <> 'PUBLICO'  GROUP BY compras.nombre ORDER BY `total` DESC
En este caso es el query del tipo de chatarra "lamina" y las fechas son entre el 1 y el 30 de julio.
Este query funciona muy bien, peeeero me falta lo de "Publico", como lo saco y que ademas aparezca en el listado que se hace con "total" del proveedor con mayor aporte al menor (aqui entre los proveedores aparecera "Publico" como proveedor).

Se podra hacer con un solo query o necesitare 2?
Espero sus compentarios, de antemano gracias por el apoyo.

Saludos!!!!!!!!
  #2 (permalink)  
Antiguo 31/07/2013, 09:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 11 meses
Puntos: 2658
Respuesta: Consulta para agrupar algunos resultados y otros no

Podríamos probar así:
Código MySQL:
Ver original
  1. SELECT  C1.nombre Nombre, SUM(P1.lamina) total,
  2. FROM    `compras` C1 INNER JOIN `provedores` P1 ON C1.nombre = P1.nombre
  3. WHERE   C1.fechayhora BETWEEN '2013/07/01' AND '2013/07/30'
  4.     AND P1.categoria <> 'PUBLICO'  
  5. SELECT  C2.categoria, SUM(C2.lamina) total,
  6. FROM    `compras` C2 INNER JOIN `provedores` P2 ON C2.nombre = P2.nombre
  7. WHERE   C2.fechayhora BETWEEN '2013/07/01' AND '2013/07/30'
  8.     AND P2.categoria = 'PUBLICO'  
  9. GROUP BY Nombre
  10. ORDER BY `total` DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 31/07/2013, 10:22
 
Fecha de Ingreso: junio-2004
Mensajes: 11
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Consulta para agrupar algunos resultados y otros no

Muchas gracias gnzsoloyo, me diste una excelente recomendacion.

Practicamente me diste la solucion, solamente le hice un par de modificaciones y le agregue el agrupar por Nombre en el primer "Select" antes del UNION.

Finalmente este fue el query que funciono, por si alguien tiene un problema parecido, tenga una idea de como solucionarlo.

Código MySQL:
Ver original
  1. SELECT  C1.nombre Nombre, SUM(C1.lamina) total
  2. FROM    `compras` C1 INNER JOIN `provedores` P1 ON C1.nombre = P1.nombre
  3. WHERE   C1.fechayhora BETWEEN '2013/07/01' AND '2013/07/30'
  4.     AND P1.categoria <> 'PUBLICO' GROUP BY Nombre
  5. SELECT  P2.categoria Nombre, SUM(C2.lamina) total
  6. FROM    `compras` C2 INNER JOIN `provedores` P2 ON C2.nombre = P2.nombre
  7. WHERE   C2.fechayhora BETWEEN '2013/07/01' AND '2013/07/30'
  8.     AND P2.categoria = 'PUBLICO'  
  9. GROUP BY Nombre
  10. ORDER BY `total` DESC

Última edición por gnzsoloyo; 31/07/2013 a las 11:01

Etiquetas: agrupar, join, php, resultados, select, sql
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 00:59.