这是一篇有关在MySQL中为数值创建直方图的超级快捷方法的文章。
使用CASE语句和其他类型的复杂逻辑,还有多种其他方法可以创建更好,更灵活的直方图。这种方法一次又一次地赢得了我的青睐,因为它很容易针对每个用例进行修改,而且简洁明了。这是您的操作方式:
SELECt ROUND(numeric_value, -2) AS bucket, COUNT(*) AS COUNT, RPAD('', LN(COUNT(*)), '*') AS barFROM my_tableGROUP BY bucket;只需将numeric_value更改为您的列,更改舍入增量就可以了。我已经将条形图设为对数刻度,这样当您具有较大的值时,它们就不会增长太多。
为了确保第一个存储桶包含的元素与后续存储桶一样多,应在ROUNDing操作中根据舍入增量对numeric_value进行偏移。
例如,对于ROUND(numeric_value,-1),范围[0,4](5个元素)中的numeric_value将放置在第一个存储桶中,而[5,14](10个元素)在第二个存储桶中,[15,24]在第三个存储桶中,除非numeric_value通过ROUND(numeric_value-5,-1)适当偏移。
这是对一些看起来很漂亮的随机数据进行这种查询的示例。足够用于快速评估数据。
+--------+----------+-----------------+| bucket | count | bar |+--------+----------+-----------------+| -500 | 1 | || -400 | 2 | * || -300 | 2 | * || -200 | 9 | ** || -100 | 52 | **** || 0 | 5310766 | *************** || 100 | 20779 | ********** || 200 | 1865 | ******** || 300 | 527 | ****** || 400 | 170 | *****|| 500 | 79 | **** || 600 | 63 | **** || 700 | 35 | **** || 800 | 14 | *** || 900 | 15 | *** || 1000 | 6 | ** || 1100 | 7 | ** || 1200 | 8 | ** || 1300 | 5 | ** || 1400 | 2 | * || 1500 | 4 | * |+--------+----------+-----------------+一些注意事项:不匹配的范围不会出现在计数中-计数列中不会有零。另外,我在这里使用ROUND函数。如果您觉得更有意义,也可以用TRUNCATE轻松替换它。
我在这里找到它http://blog.shlomoid.com/2011/08/how-to-quickly-create-histogram-
in.html



