Поиск столбцов, которые не равны NULL в PostgreSQL - PullRequest
34 голосов
/ 18 марта 2011

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

 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;

Если нет ... Советы?

1 Ответ

41 голосов
/ 18 марта 2011

номер

Этот запрос

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;
...