AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 3180
Accepted
FloE
FloE
Asked: 2011-06-07 02:27:31 +0800 CST2011-06-07 02:27:31 +0800 CST 2011-06-07 02:27:31 +0800 CST

PostgreSQL:计算包含 NULL 值的数据集/行

  • 772

我正在寻找一个简单的函数来获取包含 NULL 值的数据集(任何表)的数量。涉及多少列并不重要。

例如:

CREATE TABLE tab1 (
id INTEGER PRIMARY KEY,
dat1 VARCHAR,
dat2 VARCHAR);

INSERT INTO tab1 VALUES 
(1, NULL, 'abc'), 
(2, 'abc', NULL), 
(3, 'abc', 'abc');

SELECT count(*)
FROM tab1
WHERE id IS NULL OR dat1 IS NULL OR dat2 IS NULL;
-- 2

(我知道主键不太可能是 NULL;)

我当前的解决方案使用 R 来构建查询。有什么建议么?

postgresql null
  • 2 2 个回答
  • 6908 Views

2 个回答

  • Voted
  1. Best Answer
    Jack Douglas
    2011-06-07T05:26:14+08:002011-06-07T05:26:14+08:00

    您将需要使用动态 SQL来实现这一点,可能像这样:

    试验台:

    create role stack;
    create schema authorization stack;
    set role stack;
    
    create table my_table as 
    select generate_series(0,9) as id, null::integer as val;
    
    create table my_table2 as 
    select g as id, case when g<=5 then null::integer else 1 end as val
    from generate_series(0,9) g;
    

    功能:

    create function get_with_nulls_rowcount(p_schema in text, p_table in text) 
                    returns integer language plpgsql as $$
    declare 
      n integer;
      s text;
    begin
      --
      select array_to_string(array_agg(column_name::text||' is null'), ' or ')
      into s
      from information_schema.columns
      where table_schema=p_schema and table_name=p_table;
      --
      execute 'select count(*) from '||p_table||' where '||s into n;
      return n;
    end;$$;
    

    询问:

    select table_schema, table_name, 
           get_with_nulls_rowcount(table_schema, table_name)
    from information_schema.tables
    where table_schema='stack';
    

    结果:

     table_schema | table_name | get_with_nulls_rowcount
    --------------+------------+-------------------------
     stack        | my_table   |                      10
     stack        | my_table2  |                       6
    (2 rows)
    
    • 3
  2. Marian
    2011-06-07T03:01:34+08:002011-06-07T03:01:34+08:00

    向 NULL 添加任何内容,结果为 NULL。所以我会使用:

    SELECT count(*)
    FROM tab1
    WHERE --id IS NULL OR  /*PK is NULL? :-)*/
        (dat1 + dat2) IS NULL;
    

    但是它只是更容易编写,我不认为它比你的解决方案更快。

    • 2

相关问题

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • 默认为 NULL 还是 NOT NULL?

  • 何时使用 NULL 以及何时使用空字符串?

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve