Найдите, есть ли в столбце все нулевые значения, и извлеките их

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

Колонка А Колонка Б 1 2

В этом случае, как мне получить столбец B в качестве окончательного результата в таблице, подобной приведенной ниже, без его создания?

Ошибка Столбец Все-Нуль Колонка Б

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

Я попробовал с select count(column A), count(column B) из таблицы и получил ниже

Колонка А Колонка Б 2 0

но я застрял в том, как получить результат в указанном выше формате.

Сначала вам нужно агрегировать данные, а затем развернуть их.

Larnu 23.11.2022 14:53

Что будет на выходе, если оба столбца пустые?

Gokhan Atil 23.11.2022 15:11

Используйте системное представление (или INFORMATION_SCHEMA), чтобы получить все столбцы вашей таблицы или представления. Затем продолжите проверку каждого столбца на наличие условия, которое вы хотите проверить. Отфильтруйте любые результаты, которые не показывают ошибок/флагов. Нет прямого способа получить имя столбца в результате простого запроса.

Knut Boehnert 23.11.2022 15:19
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть более элегантные способы сделать это, если все, что вы хотите сделать, это найти столбцы со всеми нулевыми значениями. Поскольку вы упомянули, что будете проверять другие правила, например, есть ли дубликаты, объединение всех может быть подходящим способом. Выражайте каждую проверку качества данных, как правило, по одной на строку. Используйте объединение всех, чтобы создать таблицу. Наконец, оберните эти проверки во внешний выбор с предложением where, которое отфильтровывает строки, в которых правило возвращает null вместо ошибки.

create or replace table T1(COL_A int, COL_B int);
insert into T1(COL_A, COL_B) values (1, null), (2, null), (1, null);

select * from
(
select iff(count(COL_A)=0,'All-Null',null) as ERROR, 'COL_A' as COLUMN_NAME from T1
    union all
select iff(count(COL_B)=0,'All-Null',null), 'COL_B' from T1
    union all
select iff(count(COL_A)<>count(distinct COL_A), 'Has-Duplicates', null), 'COL_A' from T1
    union all
select iff(count(COL_B)<>count(distinct COL_B), 'Has-Duplicates', null), 'COL_B' from T1
)
where ERROR is not null
;
ОШИБКА COLUMN_NAME Все-Нуль COL_B Имеет дубликаты COL_A

Если это особенно широкая таблица или вам нужно воспроизвести эти проверки качества данных в нескольких таблицах, вы можете написать хранимую процедуру, которая динамически строит SQL, читая из information_schema, запускает SQL и возвращает результирующую таблицу.

Если вам нужна помощь в написании подобного SP, дайте мне знать.

Спасибо ! Это сработало для меня. Я также использовал оператор CASE для каждого столбца, чтобы проверить, равен ли count 0 для столбца, и соединил столбцы, чтобы создать вывод в одну строку. Но это очень полезно, если мне нужно расширить несколько проверок.

avinash kumar 24.11.2022 06:03

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