2013-07-24 20 views
0

У меня есть следующие две таблицыMysql получить количество продуктов

# vendor table 
vendor_id  host 
    1  192.168.0.2 
    1  192.168.0.4 
    1  192.168.0.6 
    2  192.168.1.21 
    2  192.168.1.23 
    2  192.168.1.25 
    2  192.168.1.27 

# information table 
    host  name 
192.168.0.2  bar 
192.168.0.4  bar1 

Что мне нужно в конце концов, является следующий набор результатов

vendor_id amount_live amount_total 
    1   2   3 
    2   0   4 

Столбец amount_live это количество записей на одного поставщика в таблице информации и в столбце amount_total указано количество хостов в таблице поставщика для каждого поставщика.

Может кто-нибудь из экспертов, пожалуйста, сообщите мне оператор select mysql, чтобы получить желаемый результат. Благодарю.

ответ

1

Вы можете сделать это с count и outer join:

select v.vendor_id, 
    count(i.host) amount_live, 
    count(*) amount_total 
from vendor v 
    left join information i on v.host = i.host 
group by v.vendor_id 
+1

счетчик уже имеет значение, не нулевые значения, так что вы можете просто использовать 'COUNT (i.host)' – fthiella

+0

@fthiella - не уверен, что я думал (думаю, мне нужен кофе)! Спасибо, обновил ответ ... – sgeddes

+0

Спасибо, что решает проблему. Единственная проблема, с которой я столкнулся сейчас, заключается в том, что таблица поставщиков содержит более 20 миллионов записей и информационную таблицу более 500 000 рядов. Таким образом, есть проблема с производительностью, с которой я сталкиваюсь прямо сейчас ... если у вас, ребята, какой-нибудь трюк будет потрясающим! Запуск запроса прямо сейчас, и требуется минут ... – Laoneo

Смежные вопросы