Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为表的每个字段选择COUNT where field NOT NULL_Php_Sql_Postgresql - Fatal编程技术网

Php 为表的每个字段选择COUNT where field NOT NULL

Php 为表的每个字段选择COUNT where field NOT NULL,php,sql,postgresql,Php,Sql,Postgresql,我有一个包含很多字段的表,我需要为每个字段返回NOTNULL计数 我在PHP中做了一个循环,并按字段执行一个请求 $result = array(); $champs = array("field1", "field2", "field3", "field4", "field5", "field6", "field7", "field8", "field9", "field10", "field11", "field12", "field13", "field14", "field15", "f

我有一个包含很多字段的表,我需要为每个字段返回NOTNULL计数

我在PHP中做了一个循环,并按字段执行一个请求

$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()
返回该列中具有非空值的行数

如果需要不同值的数量,请使用
COUNT(DISTINCT)

如果愿意,还可以嵌入
案例
逻辑。我通常使用
SUM()


您可以使用单个查询:

SELECT COUNT(field1), COUNT(field2), COUNT(field3), . . .
FROM my_table;
不需要对每个字段进行单独的查询
COUNT()
返回该列中具有非空值的行数

如果需要不同值的数量,请使用
COUNT(DISTINCT)

如果愿意,还可以嵌入
案例
逻辑。我通常使用
SUM()

COUNT()
已排除
NULL
值。请参阅,这样您就可以使用多个
计数(…)
COUNT()
已排除
空值。请参阅,这样您就可以有一个
选择
和多个
计数(…)
SELECT SUM(CASE WHEN field1 > 0 THEN 1 ELSE 0 END),