Группировать по диапазонам в SQLite

Вопрос:

У меня есть таблица SQLite, которая содержит числовое поле field_name. Мне нужно группировать по диапазонам этого столбца, что-то вроде этого: SELECT CAST(field_name/100 AS INT), COUNT(*) FROM table GROUP BY CAST(field_name/100 AS INT), но включая диапазоны, которые не имеют значения (COUNT для них должно быть 0). И я не могу получить, как выполнить такой запрос?

Лучший ответ:

Вы можете сделать это, используя соединение и (хотя kludgy) дополнительную таблицу.

Дополнительная таблица будет содержать каждое из значений, которые вы хотите использовать в ответе на запрос (это не только заполнило бы значения CAST(field_name/100 AS INT) между вашими возвращаемыми значениями, но также позволило бы расширить его таким образом, чтобы если ваши текущие группы были 5, 6, 7, вы можете включить от 0 до 10.

В других вариантах SQL вы сможете вступать в правое соединение или полное внешнее соединение, и вы будете в пути. Увы, SQLite этого не предлагает.

Соответственно, мы будем использовать перекрестное соединение (присоединяем все ко всему), а затем фильтруем. Если у вас относительно небольшая база данных или небольшое количество групп, вы в хорошей форме. Если у вас их много, это будет очень интенсивный способ сделать это (результат перекрестного соединения будет содержать строки #ofRowsOfData * #ofGroups, поэтому не смотрите).

Пример:

TABLE: groups_for_report

desired_group
-------------
0
1
2
3
4
5
6

Таблица: данные

fieldname    other_field
---------    -----------
250          somestuff
230          someotherstuff
600          stuff

вы должны использовать запрос типа

select groups_for_report.desired_group, count(data.fieldname)
from data
cross join groups_for_report
where CAST(fieldname/100.0 AS INT)=desired_group
group by desired_group;

Оцените статью
TechArks.Ru
Добавить комментарий