Поиск столбцов, которые не являются 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;
Если нет... Любые советы?
Ответы
Ответ 1
Нет.
Этот запрос
SELECT DISTINCT column_name, table_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name IS NOT NULL
вернет все строки, которые имеют значение в столбце column_name.
Все строки в этой таблице всегда будут иметь значение в столбце "column_name".
Вам просто нужно знать, сколько столбцов имеет значение 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;
Ответ 2
Чтобы получить счетчик всех столбцов NOT NULL в любой таблице, используйте:
SELECT count(*)
FROM information_schema.columns
WHERE table_schema = 'table_schema_here'
AND table_name = 'table_name_here'
AND is_nullable = 'YES';
Надеюсь, это кому-нибудь поможет.