具有负值的mysql直方图

时间:2014-12-13 16:24:27

标签: mysql histogram

我有一张这样的表:

ID | value
----------
1  |  -3 
2  |  -4
3  |   5
4  |   2

我想在mysql中显示直方图,如下所示:

ID | value | histogram
-------------------------
1  |  -3   | ***
2  |  -4   |****
3  |   5   |    *****
4  |   2   |    **

我无法弄清楚如何表示负值。

1 个答案:

答案 0 :(得分:1)

这可以通过一些字符串操作猴子业务来完成。但是您需要使用等宽字体显示生成的文本字符串。在许多字体中,空格字符占用星形字符的空间较少,因此如果您以这种方式显示这些星形串,则零点不会排成一行。

首先,如果IF(value<0, -value, 0)5,则表达式value将生成-5,否则为零。

其次,表达式REPEAT('*', IF(value<0,-value,0))将从-5值中连续获得五颗星,并且没有任何正值的星。

第三,REVERSE(RPAD(REPEAT('*', IF(value<0,-value,0)), 20, ' '))将为您提供一个20个字符长的文本字符串,以连续五个星形结尾。这就是你如何处理小图表的负面部分。

最后,将其连接到REPEAT('*',IF(value<0,0,value))以获得对value的正面实例有用的内容。

这应该为你做。

SELECT id,
       value,
       CONCAT( REVERSE(RPAD(REPEAT('*', IF(value<0,-value,0)), 20, '=')),
               REPEAT('*',IF(value<0,0,value))
              ) AS histogram
  FROM t
 ORDER BY id

请注意,我将20硬编码为可在此处使用的最大负值。如果需要,你可以做一些更复杂的事情。