Поиск столбцов, которые не равны NULL в PostgreSQL

У меня было задание для каждой таблицы подсчитывать столбцы, которые можно обнулять. Легко:

 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;

Если нет... Какие-нибудь советы?

3 ответа

Нет.

Этот запрос

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

вернет все строки, которые имеют значение в столбце "имя-столбца".

Все строки в этой таблице всегда будут иметь значение в столбце "имя-столбца".

Вам просто нужно знать, сколько столбцов можно обнулять и сколько не обнуляемых?

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;

Чтобы получить количество всех столбцов NOT NULL:

      SELECT count(*)
  FROM information_schema.columns
  WHERE  table_name  = 'table_name'
     AND is_nullable = 'NO';

Чтобы получить количество всех столбцов NOT NULL в любой таблице, используйте:

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

Надеюсь, это кому-то поможет.

Другие вопросы по тегам