2010-10-16 181 views
3

我知道下面的查詢是無效的,但我只是用它作爲我試圖實現的例子。在一個查詢中執行多個MySQL計數?

基本上就是我想要做的就是讓所有的行&隨後也得到行數()與在一個查詢條件子句的COUNT()。

如..

SELECT 
    COUNT(*) AS full_amount, 
    COUNT(address IF NOT NULL), 
    COUNT(name IF NOT NULL) 
FROM 
    table; 

現在,我想上面找出是表&我也想找出行數在表的完整計數'地址'&'名稱'字段不是NULL。不是他們都不是零的地方,而是單獨地。

爲了進一步解釋,這是怎麼了將與多個查詢,而我試圖避免做..

SELECT COUNT(*) FROM table AS amount; 

SELECT COUNT(*) FROM table AS amount WHERE address IS NOT NULL; 

SELECT COUNT(*) FROM table AS amount WHERE name IS NOT NULL; 

有沒有更好的方式來做到這一點不是運行多個查詢?

回答

4

你就要成功了 - 行COUNT數量進行計數,其中它的參數是不NULL:

SELECT COUNT(*) AS full_amount, 
    COUNT(address) AS has_address, 
    COUNT(name) AS has_name 
FROM table; 

另見COUNT(DISTINCT ...)不同非NULL值的數目。

+0

+1:由〜48秒 – 2010-10-16 22:02:38

+0

非常感謝西蒙打我。 :) – Brett 2010-10-16 22:26:52

0

您可以使用這一招做到這一點:

SELECT COUNT(*), 
    SUM(IFNULL(address, 0, 1)) AS address_count, 
    SUM(IFNULL(name, 0, 1)) as name_count 
FROM Table;