suma de 1 columna 2 resultados diff donde por resultado! tan simple pero no funciona

ok, esto es muy simple, ¡pero he estado buscando durante 3 horas y todavía no puedo hacerlo funcionar!

el escenario es que tengo una base de datos con costos individuales de 2 negocios y quiero sumar el costo de cada negocio y presentarlo en la pantalla. ahora sé que esto es lo suficientemente simple y fácil de hacer con dos SELECCIONES. pero quiero hacer esto en una consulta!

DB

|cost|business|
|100 |   1    |
|200 |   2    |
|200 |   1    |
|300 |   2    |

así que de la tabla anterior sabemos que b1 = 300 y b2 = 500. ¡pero ninguna de mis consultas funciona!

Probé UNION y CASE pero no los conozco. mis consultas:

primer intento:

$buscost = mysql_query("SELECT FORMAT(sum(`cost`),2) as `b1` FROM `outgoing` WHERE `business`=1 
UNION 
SELECT FORMAT(sum(`cost`),2) as `b2` FROM `outgoing` WHERE `business`=2")
or die(mysql_error());
    $buscost = mysql_fetch_array($busowe);

segundo intento:

$buscost = mysql_query("SELECT 
CASE WHEN `business` = 1 THEN FORMAT(sum(`cost`),2) END AS `b1` ,
CASE WHEN `business` = 2 THEN FORMAT(sum(`cost`),2) END AS `b2`  
FROM `outgoing` WHERE `active`='yes' ");
$buscost = mysql_fetch_array($buscost);

*el costo se establece como float(11,2).

estoy seguro de que estoy cerca, simplemente no sé lo suficiente como para resolverlo, he encontrado preguntas similares aquí, ¡pero ninguna de las respuestas ayudó!

ah y si yo print_r, el primero solo obtiene la suma de b1, ¡b2 no existe! y la segunda matriz todo lo que obtengo es el conjunto de resultados del primer caso y el caso 2 "b2" está vacío, ¡pero existe! Revisé las tablas y hay datos de prueba para ambos negocios.

por favor ayuda cualquier consejo o una solución es muy apreciada.

editar: olvidé mencionar que todos los resultados también deberán filtrarse con where active='sí'

preguntado el 22 de mayo de 12 a las 20:05

gracias a jcho360 y especialmente a dalen por responder y editar un par de veces probé el union one pero volvió a fallar pero finalmente usé SELECT ( SELECT FORMAT(sum(cost),2) as b1 FROM outgoing WHERE business=1 AND active = 'yes' GROUP BY business ) AS b1, ( SELECT FORMAT(sum(cost),2) as b1 FROM outgoing WHERE business=2 AND active = 'yes' GROUP BY business ) AS b2 y funciona perfecto.. GRACIAS POR LAS RESPUESTAS RÁPIDAS CHICOS MUY APRECIADOS -

4 Respuestas

Necesitas agrupar por:

SELECT business, FORMAT(sum(`cost`),2) AS cost
FROM outgoing
WHERE active = 'yes'
GROUP BY business

si quieres el formato:

business | cost
b1       | 300
b2       | 500

or

SELECT
(
   SELECT FORMAT(sum(`cost`),2) as `b1`
   FROM `outgoing`
   WHERE `business`=1 AND active = 'yes'
   GROUP BY business
) AS b1,
(
   SELECT FORMAT(sum(`cost`),2) as `b1`
   FROM `outgoing`
   WHERE `business`=2 AND active = 'yes'
   GROUP BY business
) AS b2

si necesitas el formato

b1 | b2
300| 500

contestado el 22 de mayo de 12 a las 20:05

gracias amigo, justo lo que necesitaba. ¡aunque su consulta principal solo resultó en la suma del primer conjunto! pero el segundo es perfecto - bofetada-x

hubo un error en la primera consulta, ahora está ajustado - Dalen

SELECT  business, SUM(cost)
FROM    mytable
GROUP BY
        business

contestado el 22 de mayo de 12 a las 20:05

Trata

SELECT business, SUM(cost) AS totalCost FROM myTable GROUP BY business

contestado el 22 de mayo de 12 a las 20:05

puedes probar esto:

     select

 @num1:=(select sum(actor_id) from actor where actor_id%2=0)as number_1, 

@num2:=(select sum(actor_id) from actor where actor_id%2!=0)as number_2,

@num1+@num2 as TOTAL;

o si necesitas activo.

     select

 @num1:=(select sum(actor_id) from actor where actor_id%2=0 and  active='yes')as number_1, 

@num2:=(select sum(actor_id) from actor where actor_id%2!=0 and  active='yes')as number_2,

@num1+@num2 as TOTAL;

contestado el 22 de mayo de 12 a las 20:05

gracias, buena edición agregando el TOTAL también, creo que ahora también puedo deshacerme de la otra consulta. - bofetada-x

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.