【问题标题】:Select COUNT where field NOT NULL, for each field of the table为表的每个字段选择 COUNT where field NOT NULL
【发布时间】:2016-06-18 16:21:54
【问题描述】:

我有一个包含很多字段的表,我需要为每个字段返回 NOT NULL 的 COUNT。

我在 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 请求返​​回相同的最终结果?!

感谢您的帮助

【问题讨论】:

标签: php sql postgresql


【解决方案1】:

您可以使用单个查询:

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

【讨论】:

    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多