Как создать гистограмму с помощью MySQL

Я пытаюсь создать данные гистограммы, используя следующий запрос:

SELECT FLOOR(Max_Irrad/10) AS bucket, COUNT(*) AS COUNT
FROM marctest.test_summarynimish
where Lcu_name='Allegro'
  and Lcu_Mode='Standard'
GROUP  BY bucket;

вот результат, который я получаю:

bucket count
 0        3
 4        3
 5       12
 7        6
 8        3
10        3

теперь поле корзины - это диапазон или интервал, используемый в гистограмме. Я хочу создать значения корзины с постоянным диапазоном, например, начиная с 0,4,8,12 .... и так далее .. Есть ли способ добиться этого в mysql? Вот как я ожидаю получить в результате:

 bucket count
 0        3
 4       21
 8        6

person NIMISH DESHPANDE    schedule 11.02.2012    source источник
comment
Я предоставил результат вышеприведенного запроса .. вам нужно что-то еще, кроме этого?   -  person NIMISH DESHPANDE    schedule 11.02.2012
comment
Это помогло бы узнать, каков ожидаемый результат (так же, как вы отображали результат своего запроса, И используя те же самые образцы данных, чтобы понять логику, лежащую в основе)   -  person Mosty Mostacho    schedule 11.02.2012
comment
Я пытаюсь опубликовать ожидаемый результат в виде таблицы, но не могу этого сделать. Прошу прощения, так как я новичок на форуме   -  person NIMISH DESHPANDE    schedule 11.02.2012
comment
Разве это не должно быть (0,3); (4,21); (8,6)? От 0,1,2,3 - 4,5,6,7 - 8,9,10,11?   -  person Mosty Mostacho    schedule 11.02.2012
comment
да вот как я хочу. Систематическая раздача ковшей или бункера   -  person NIMISH DESHPANDE    schedule 11.02.2012
comment
Возможный дубликат MySQL: получение данных для построения гистограммы?   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 07.10.2015


Ответы (2)


Я думаю, что мы можем использовать следующую общую форму для создания общей гистограммы:

select (x div 4) * 4 as NewX, count(*) as NewY from histogram
group by NewX

Где x - реальное значение x по оси x, а count(*) - реальное значение y. Число 4 - это размер значений x, которые мы хотим сгруппировать. Это означает, что мы сгруппируем все значения x в группы по 4 (например: группа 1 - это 0, 1, 2, 3; группа 2 - это 4, 5, 6, 7 и т. Д.). Количество каждого элемента в группе станет значением NewY.

Вы можете поиграть с этим здесь

Применяя эту логику к вашему запросу, это будет:

select (floor(Max_Irrad/10) div 4) * 4 as NewX, count(*) as NewY
from marctest.test_summarynimish
where Lcu_name='Allegro' and Lcu_Mode='Standard'
group by NewX

Сообщите мне, если у вас возникнут проблемы или сомнения по этому поводу.

person Mosty Mostacho    schedule 11.02.2012
comment
Решение, которое вы предоставляете, работает, спасибо .... :) это было бы действительно очень полезно - person NIMISH DESHPANDE; 11.02.2012
comment
Вышеупомянутый метод является правильным, за исключением того, что он не будет сообщать о сегментах с нулевыми выборками. - person LionHeart; 06.12.2012
comment
Кроме того, если размер корзины не является целым числом, это не сработает. Вместо этого вам понадобится floor (value / binSize) * binSize для нецелочисленных размеров бункера. - person juacala; 12.02.2014
comment
@LionHeart В этом есть смысл. Если нет строк, содержащих данные, то эти недостающие строки невозможно отобразить, верно? :) Если вы хотите знать, как генерировать данные в MySQL, я написал длинное объяснение с парой альтернатив в этот другой вопрос. В любом случае недостающие данные можно легко и более эффективно обнулить при форматировании результатов в гистограмме. - person Mosty Mostacho; 12.02.2014

Просто увеличьте свои ведра, разделив Max_Irrad на 40 вместо 10.

person David Grayson    schedule 11.02.2012