2016-06-18 92 views
0

我有一個包含很多字段的表,並且我需要爲每個字段返回NOT NULL的COUNT。選擇COUNT,其中字段NOT NULL,表中的每個字段

我做PHP中的循環,我執行由場1名的請求......

$result = array(); 
$champs = array("field1", "field2", "field3", "field4", "field5", "field6", "field7", "field8", "field9", "field10", "field11", "field12", "field13", "field14", "field15", "field16", "field17", "field18", "field19", "field20"); 

foreach ($champs as $value) { 
    $and = empty($filtroAdd) ? "$value IS NOT NULL" : "AND $value IS NOT NULL"; 

    $requete = "SELECT COUNT($value) 
       FROM my_table 
       WHERE $filtroAdd $and"; 
    $r = $db->query($requete)->fetch(PDO::FETCH_NUM); 

    $result[$value] = $r[0]; 
} 

print_r($result); 

我想是不是更好的辦法,我們當然可以用一個PostgreSQL的請求返回相同的最終結果?!

感謝您的幫助

+3

'COUNT()'已經排除了NULL值。見http://www.techonthenet.com/postgresql/functions/count.php,所以你可以有一個'SELECT'和多個'COUNT(...)' –

回答

2

您可以使用一個單一的查詢:

SELECT COUNT(field1), COUNT(field2), COUNT(field3), . . . 
FROM my_table; 

沒有必要爲每個字段做一個單獨的查詢。 COUNT(<field>)返回該列中具有非NULL值的行數。

如果你想的不同值的數量,然後使用COUNT(DISTINCT)

SELECT COUNT(DISTINCT field1), COUNT(DISTINCT field2), COUNT(DISTINCT field3), . . . 
FROM my_table; 

您還可以嵌入CASE邏輯,如果你喜歡。我通常使用SUM()

SELECT SUM(CASE WHEN field1 > 0 THEN 1 ELSE 0 END), 
相關問題