Nano Hash - криптовалюты, майнинг, программирование

Запрос oracle sql для количества вхождений данных между некоторыми значениями

Я хочу количество вхождений данных между некоторыми значениями, давайте возьмем val в качестве имени столбца, имеющего значения от 1 2 3 4 .... до 100. Я хочу от 0 до 5, затем от 5 до 10, затем от 10 до 15 и вскоре до 100. Желаемый результат, как

id  count(val)
1   35
2   12
3   89
4   45
5   12

Я могу сделать это, написав такой запрос.

select colname,
       sum(case 
             when val > 0 and val < 5 then 1 else 0 
           end) 
  from tablename 
 group by colname.

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

03.01.2017

  • От 0 до 5, потом от 5 до 10... - Где считать 5, в первом сете или во втором? (Или в обоих случаях - считать это дважды?) Затем в запросе вы пишете val > 0 and val < 5 - значит, вы не хотите, чтобы здесь учитывались 0 и 5? Вам нужно принять решение. Например: от 0 (включительно) до 5 (исключительно) или val >=0 and val < 5, затем val >= 5 and val < 10, затем ..... Вам нужны результаты в строках или в столбцах? Если в столбцах, нет способа избежать написания всех имен столбцов (и в любом случае это плохая практика). Также: есть ли нижняя и верхняя границы для val? 03.01.2017

Ответы:


1

То, что вы ищете, это гистограмма. Один из способов добиться желаемого результата — использовать функцию width_bucket():

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions214.htm

Вам может понадобиться сгенерировать строки для интервалов с количеством 0 — вы можете сделать это, например, с помощью внешнего соединения с таблицей (которое вы можете легко сгенерировать на лету), имеющей все значения b от 1 до 20 (используя мои обозначения ниже).

with
     test_data ( id, val ) as (
       select 1, 35 from dual union all
       select 2, 12 from dual union all
       select 3, 89 from dual union all
       select 4, 45 from dual union all
       select 5, 12 from dual
     )
-- end of test data; solution (SQL query) begins below this line
select   5 * (b - 1) as int_from, 5 * b as int_to, count(1) as ct
from     ( select width_bucket(val, 0, 100, 20) as b from test_data )
group by b
order by b
;

  INT_FROM     INT_TO         CT
---------- ---------- ----------
        10         15          2
        35         40          1
        45         50          1
        85         90          1

4 rows selected.
03.01.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..