2013-07-24 44 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是每個供應商的供應商表中的主機數量。

有些專家可以告訴我mysql select語句來獲得所需的結果集。謝謝。

回答

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

謝謝你解決了這個問題。我現在遇到的唯一問題是供應商表有超過2000萬條目和超過50萬行的信息表。所以我現在面臨着一個性能問題......如果你們有任何技巧,那就太棒了! 現在運行查詢,它需要幾分鐘... – Laoneo