Счетчик SQL (SQLite) для пустых полей по всем столбцам - PullRequest
1 голос
/ 02 декабря 2011

У меня есть таблица с именем datapoints, содержащая около 150 столбцов и 2600 строк. Я знаю, 150 столбцов - это слишком много, но я получил эту БД после импорта CSV, и я не могу уменьшить количество столбцов.

Мне нужно получить статистические данные из данных. Например. один вопрос будет: Дайте мне общее количество полей (всех столбцов), которые являются нулевыми. Кто-нибудь знает, как я могу сделать это эффективно?

Для одного столбца это не проблема:

SELECT count(*) FROM datapoints tb1 where 'tb1'.'column1' is null;

Но как я могу решить это для всех столбцов вместе, не делая это вручную для каждого столбца?

Лучший, Michael

Ответы [ 4 ]

1 голос
/ 02 декабря 2011

Основываясь на идее Ламака, как насчет этой идеи:

SELECT (N * COUNT(*)) - (
    COUNT(COLUMN_1) 
  + COUNT(COLUMN_2) 
  + ... 
  + COUNT(COLUMN_N)
)
FROM DATAPOINTS;

где N - количество столбцов. Хитрость заключается в создании серии суммирования COUNT (столбец), но это не должно быть слишком страшно с хорошим текстовым редактором и / или таблицей.

0 голосов
/ 02 декабря 2011

Я не думаю, что есть простой способ сделать это.я бы начал на 150 запросов.вам нужно только заменить одно слово (имя столбца) каждый раз.

0 голосов
/ 02 декабря 2011

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

SELECT SUM(CASE COLUMN1 WHEN NULL THEN 1 ELSE 0 END) +
       SUM(CASE COLUMN2 WHEN NULL THEN 1 ELSE 0 END) +
       SUM(CASE COLUMN3 WHEN NULL THEN 1 ELSE 0 END) +
       ...
FROM DATAPOINTS;

С помощью визуального построителя запросов вы можете быстро сгенерировать:

SELECT COLUMN1, COLUMN2, COLUMN3  ... FROM DATAPOINTS;

Затем вы можете заменить запятую на всетекст, который должен появиться между двумя именами полей с последующим исправлением первого и последнего полей.Так что в примере найдите «,» и замените на «КОГДА НУЛЬ 1, ИЛИ 0, КОНЕЦ) + СУММА (CASE», а затем исправьте первое и последнее поля.

0 голосов
/ 02 декабря 2011

Ну, COUNT (и большинство функций агрегации) игнорируют значения NULL.В вашем случае, поскольку вы используете COUNT(*), он считает каждую строку в таблице, но вы можете сделать это для любого столбца.Как то так:

SELECT TotalRows-Column1NotNullCount, etc
FROM (
    SELECT COUNT(1) TotalRows,
           COUNT(column1) Column1NotNullCount,
           COUNT(column2) Column2NotNullCount,
           COUNT(column3) Column3NotNullCount ....
    FROM datapoints) A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...