2013-09-01 4 views
0

У меня есть две таблицы аренды и продаж. Существует статус поля. Если статус = 1 не публикуется, статус = 2 публикуется, а статус = 3 находится в ожидании.Сумма Проблема с несколькими полями в запросе mysql select

Я хочу найти сумму всех опубликованных, непубличных и ожидающих аренды и продаж для агентов.

Вот что я пытался, но он дал мне неправильные данные

select sum(publish1) publish, sum(unpublish1) unpublish, sum(pending1) pending, agent_id,status from ( 

select agent_id,status, count(*) as publish1, 0 unpublish1, 0 pending1 from rentals where status = 2 GROUP BY agent_id 

union all select agent_id,status, 0 publish1, count(*) as unpublish1, 0 pending1 from rentals where status = 1 GROUP BY agent_id 

union all select agent_id,status, 0 publish1, 0 pending1, count(*) as pending1 from rentals where status = 3 GROUP BY agent_id 

union all select agent_id,status, count(*) as publish1, 0 unpublish1, 0 pending1 from sales where status = 2 GROUP BY agent_id 

union all select agent_id,status, 0 publish1, count(*) as unpublish1, 0 pending1 from sales where status = 1 GROUP BY agent_id 

union all select agent_id,status, 0 publish1, 0 pending1, count(*) as pending1 from sales where status = 3 GROUP BY agent_id) s GROUP BY agent_id 

ответ

0

На основании вашего описания проблемы, ваш запрос выглядит правильно. Вот еще один способ написания запроса. Он просто делает агрегацию до union:

select agent_id, 
     sum(case when status = 2 then val else 0 end) as publish, 
     sum(case when status = 1 then val else 0 end) as unpublish, 
     sum(case when status = 3 then val end) as pending 
from ((select status, agent_id, status, count(*) as val 
     from rentals 
     where status in (2, 1, 3) 
     group by status, agent_id 
    ) union all 
     (select status, agent_id, count(*) as val 
     from sales 
     where status in (2, 1, 3) 
     group by status, agent_id 
    ) 
    ) t 
group by agent_id; 
Смежные вопросы