【问题标题】:How to create a histogram using MySQL如何使用 MySQL 创建直方图
【发布时间】:2012-03-03 13:36:59
【问题描述】:

我正在尝试使用以下查询创建直方图数据:

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

现在bucket字段是直方图中使用的范围或bin。我想创建一个范围一致的存储桶值,例如从 0,4,8,12.... 等开始。有没有办法在 mysql 中实现这一点? 这就是我期望的结果:

 bucket count
 0        3
 4       21
 8        6

【问题讨论】:

  • 我已经提供了上面的查询结果..除此之外您还需要什么额外的吗?
  • 了解预期结果会有所帮助(与显示查询结果的方式相同,并使用相同的示例数据,以了解背后的逻辑)
  • 我正在尝试以表格形式发布预期结果,但我无法做到。我很抱歉,因为我是论坛的新手
  • 不应该是(0,3);(4,21);(8,6)吗?从 0,1,2,3 - 4,5,6,7 - 8,9,10,11?
  • 是的,这就是我想要的。桶或箱的系统分布

标签: mysql sql histogram


【解决方案1】:

只需将 Max_Irrad 除以 40 而不是 10 即可使您的存储桶更大。

【讨论】:

    【解决方案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值

    你可以玩这个here

    将此逻辑应用于您的查询,这将是:

    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
    

    如果您对此有任何问题或疑问,请告诉我。

    【讨论】:

    • 您提供的解决方案非常有效...... :) 这真的很有帮助
    • 上述方法是正确的,只是它不会报告具有零样本的桶。
    • 另外,如果你的 bin 大小是非整数,它就不起作用。您将需要 floor(value/binSize)*binSize 用于非整数 bin 大小。
    • @LionHeart 这是有道理的。如果没有包含数据的行,那么就不可能显示那些缺失的行,对吧? :) 如果您想知道如何在 MySQL 中生成数据,我已经在 this other question 中写了一个很长的解释,其中包含几个替代方案。无论如何,在对直方图中的结果进行格式化时,可以轻松、更有效地对缺失的数据进行零填充。
    猜你喜欢
    • 2022-07-08
    • 2017-07-27
    • 2012-06-25
    • 2011-06-21
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多