2014-12-13 77 views
3

我有这样的一个表:MySQL的直方图负值

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

,我想表明这样在MySQL直方图:

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

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

回答

1

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

首先,如果value-5,则表达式IF(value<0, -value, 0)将产生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作为最大的负值将在这里工作。如果需要,你可以做更复杂的事情。