簡體   English   中英

為表的每個字段選擇COUNT,其中字段NOT NULL

[英]Select COUNT where field NOT NULL, for each field of the table

我有一個包含很多字段的表,我需要為每個字段返回COUNT NOT 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請求返回相同的最終結果?

感謝幫助

您可以使用一個查詢:

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),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM