选择COUNT,其中字段NOT NULL,表中的每个字段
问题描述:
我有一个包含很多字段的表,并且我需要为每个字段返回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的请求返回相同的最终结果?!
感谢您的帮助
答
您可以使用一个单一的查询:
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),
'COUNT()'已经排除了NULL值。见http://www.techonthenet.com/postgresql/functions/count.php,所以你可以有一个'SELECT'和多个'COUNT(...)' –