2013-12-12 3 views
0

У меня есть таблица журнала выглядеть следующим образомPostgreSQL запрос, чтобы получить сводную результат

rpt_id | shipping_id | shop_id | status | create_time 
------------------------------------------------------------- 
1  | 1   | 600  | 1  | 2013-12-01 01:06:50 
2  | 1   | 600  | 0  | 2013-12-01 01:06:55 
3  | 1   | 600  | 1  | 2013-12-02 10:00:30 
4  | 2   | 600  | 1  | 2013-12-02 10:00:30 
5  | 1   | 601  | 1  | 2013-12-02 11:20:10 
6  | 2   | 601  | 1  | 2013-12-02 11:20:10 
7  | 1   | 601  | 0  | 2013-12-03 09:10:10 
8  | 3   | 602  | 1  | 2013-12-03 13:15:58 

И я хочу использовать один запрос, чтобы сделать его выглядеть следующим образом

shipping_id | total_activate | total_deactivate 
----------------------------------------------- 
1   | 2    | 2 
2   | 2    | 0 
3   | 1    | 0 

Как я должен запросить это?

Примечание:

  • Status = 1 = Активировать
  • Status = 0 = Деактивировать
  • Count Общее активировать/деактивировать правила: посмотреть на лог таблице выше. rpt_id 1 & 3, он имеет тот же shop_id, shipping_id и статус. Он должен считать только один. См. Таблицу результатов. Отгрузка id 1 активируется только двумя магазинами, они являются shop_id 600 и 601.

Можете ли вы, ребята, посоветовать мне, как сделать запрос? спасибо за помощь: D

+2

Нет времени, чтобы ответить прямо сейчас, но искать «кросс» –

ответ

1

Попробуйте это:

select shipping_id, 
     sum(case when status=1 then 1 else 0 end) as total_activate, 
     sum(case when status=0 then 1 else 0 end) as total_deactivate 
from (select distinct shipping_id, 
         shop_id, 
         status 
     from test) a 
group by shipping_id 
order by shipping_id 

Посмотри здесь скрипку: http://sqlfiddle.com/#!15/f15fd/4

Я не ставил дату запроса, как это не важно для результата.

1

Да спасибо ... я понял это уже, вы можете сделать это таким образом тоже .... THx

SELECT 
    shipping_id, 
    COUNT(DISTINCT CASE WHEN status = 1 THEN shop_id END) AS total_activate, 
    COUNT(DISTINCT CASE WHEN status = 0 THEN shop_id END) AS total_deactivate 
FROM 
    test 

GROUP BY 
    shipping_id 
ORDER BY 
    shipping_id 
Смежные вопросы