Я пытаюсь сгруппировать набор данных в управляемые куски. Чтобы определить приоритеты записей, на которых нужно сосредоточиться в первую очередь, я хочу сгруппировать записи в порции уровня «полнота», где полнота == число столбцов, не равных нулю в данной строке. У меня проблемы с логи c, чтобы только вернуть строки с определенным количеством столбцов не равно нулю.
Например, если у меня была таблица с 10 столбцами и 10 строками.
Группа 1 будет содержать все строки, где число столбцов, не равное нулю для данной строки, больше или равно 8. ie.) НЕ НУЛЬ>> 8
Группа 2 будет содержать все строки, где число столбцов, не равное нулю для данной строки, больше или равно 6 и меньше 8. ie.) IS NOT NULL> = 6 и NOT NULL <8 </p>
Группа 3 будет содержать все строки, где число столбцов, не равное нулю для данной строки, больше или равно 4, и менее 6.
Et c.
Мой запрос ниже является ближайшей попыткой, но он явно не работает, и я не уверен, как бы я пропустил oop через каждый столбец и увеличил бы Logic
на 1 каждый время вместо того, чтобы просто заменить одно значение на 1 или 0. Было бы лучше сделать это таким образом? Где я перебираю и увеличиваю значение в новом столбце на основе количества NULL-столбцов, а затем просто фильтрую на основе этого значения?
В качестве альтернативы, в идеале я мог бы просто возвращать строки, где количество столбцов, не равное нулю, попадает в заданный диапазон. Но я не уверен, возможно ли это в SQLite.
SELECT *
CASE WHEN * IS NOT NULL
THEN 1
ELSE 0
END AS Logic
FROM contacts_all
WHERE Logic >=8;
Возможно ли это в SQLite? Я пытался сделать это в Python хорошо, но набор данных настолько массивен, что каждый раз сбивает мой компьютер. Честно говоря, вероятно, потому что мой код python является мусором.
Любые отзывы или мысли были бы очень ценными и ценными, спасибо!
РЕДАКТИРОВАТЬ: Стоит также упомянуть, что любое решение, связанное с набором текста имена каждого из столбцов не идеальны (хотя приветствуются!), так как количество столбцов равно 247. Я надеюсь, что не буду вводить каждое из этих имен в запрос. Хотя я мог бы просто использовать CONCAT для форматирования в Excel, я хотел бы узнать, как на самом деле сделать это в SQL.
EDIT2: вот пример таблицы и желаемых результатов:
+---------+---------+---------+------+
| Col1 | Col2 | Col3 | Col4 |
+---------+---------+---------+------+
| Value 1 | Value 2 | Value 3 | NULL |
| Banana | 123 | NULL | NULL |
| Banana | 123 | NULL | NULL |
| Banana | NULL | NULL | NULL |
+---------+---------+---------+------+
Группа 1: ГДЕ число полей не равно нулю> = 3 Возвращает строку 1
Группа 2: ГДЕ число полей не равно нулю <3 И> = 2 Возвращает строки 1, 2, 3
Группа 3: ГДЕ число полей не равно нулю <2 AND> = 1 Возвращает строки 1, 2, 3, 4