51

我为每个表分配了一个计数可空列的任务。简单的:

 SELECT table_name, count(*) FROM INFORMATION_SCHEMA.COLUMNS
 WHERE is_nullable='NO'
 GROUP BY table_name;


现在我必须修改它以计算“具有属性“NOT NULL”的列”。以下代码会执行此操作还是仅检查天气列名称是否为空?

CREATE TEMP TABLE A AS 
SELECT DISTINCT column_name, table_name AS name FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name IS NOT NULL
GROUP BY table_name, column_name;

SELECT name, count(*) FROM A
GROUP BY name;

如果没有...有什么建议吗?

4

3 回答 3

57

不。

这个查询

SELECT DISTINCT column_name, table_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name IS NOT NULL

将返回在“column_name”列中具有值的所有行。

该表中的所有行将始终在“column_name”列中具有一个值。

您是否只需要知道有多少列可以为空,有多少列不可为空?

SELECT is_nullable, COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY is_nullable;

按表名计算?我想你可以用这个。

SELECT table_name, is_nullable, count(*)
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY table_name, is_nullable
ORDER BY table_name, is_nullable;
于 2011-03-17T21:36:42.580 回答
1

要获取任何表中所有 NOT NULL 列的计数,请使用:

SELECT count(*)
  FROM information_schema.columns
 WHERE table_schema = 'table_schema_here'
   AND table_name   = 'table_name_here'
   AND is_nullable = 'YES';

我希望这会对某人有所帮助。

于 2019-08-27T06:21:53.437 回答
1

要获得所有 NOT NULL 列的计数:

SELECT count(*)
  FROM information_schema.columns
  WHERE  table_name  = 'table_name'
     AND is_nullable = 'NO';
于 2020-12-17T15:00:11.567 回答