2012-05-22 1 views
1

ok это очень просто, но искали 3 часа и все еще не могли заставить его работать!сумма 1 столбца 2 результата diff, где каждый результат! так просто, но не работает

сценарий: у меня есть дБ с индивидуальными расходами на 2 бизнеса, и я хочу суммировать стоимость каждого бизнеса и присутствовать на экране. теперь я знаю, что это достаточно просто и легко сделать с помощью двух SELECT. но я хочу сделать это в одном запросе!

DB

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

так из таблицы выше мы знаем, что b1 = 300 и b2 = 500! но ни один из моих запросов не работает!

У меня есть попытки UNION и CASE, но я не знаком с ними. мои запросы:

первый попробовать:

$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); 

вторая попытка:

$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); 

* стоимость устанавливается как поплавок (11,2).

im im im close Я просто не знаю достаточно, чтобы понять это, нашел похожие вопросы здесь, но ни один из ответов не помог!

oh и if i print_r, первый только выбирает сумму b1, b2 не существует! и второй массив, все, что я получил, - это набор результатов первого случая, а случай 2 "b2" пуст, но существует !! я проверил таблицы и там есть тестовые данные для обоих предприятий ».

, пожалуйста, помогите с любыми советами или решениями с благодарностью.

редактировать: забыл упомянуть все результаты также должны быть отфильтрованы с тем, где active = «да»

+0

благодаря jcho360 и специально Дален для ответа и редактирования несколько раз пытались союз один, но он снова не удалось, но я, наконец, используется ** 'ВЫБРАТЬ ( выбрать формат (сумма (стоимость), 2), как b1 ОТ исходящего где бизнес = 1 и активного = 'да' GROUP BY бизнеса ) AS b1, ( выбрать формат (сумма (стоимость), 2) в качестве б1 ОТ исходящего где бизнес = 2 и активного = ' да ' GROUP BY business ) AS b2' ** и отлично работает .. СПАСИБО ДЛЯ БЫСТРОГО ОТВЕТА ПАРОВЫ МНОГО ПРИЛОЖЕНИЙ CIATED –

ответ

1

Youn нужно сгруппировать по:

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

, если вы хотите, формат:

business | cost 
b1  | 300 
b2  | 500 

или

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 

если вам нужен этот формат

b1 | b2 
300| 500 
+0

спасибо, чувак, только то, что мне нужно. хотя ваш верхний запрос привел только к суммированию первого набора! но второй - пятно на –

+0

была ошибка при первом запросе, теперь она настроена – Dalen

0

Попробуйте

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

вы можете попробовать это:

 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, 

@[email protected] as TOTAL; 

или, если вам нужно активно.

 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, 

@[email protected] as TOTAL; 
+0

спасибо, приятно редактировать добавив TOTAL, а также думаю, что я могу избавиться от другого запроса тоже сейчас. –

+0

@ slappy-x Я рад, что вы смогли решить свою проблему. – jcho360