我有一张这样的表:
ID | value
----------
1 | -3
2 | -4
3 | 5
4 | 2
我想在mysql中显示直方图,如下所示:
ID | value | histogram
-------------------------
1 | -3 | ***
2 | -4 |****
3 | 5 | *****
4 | 2 | **
我无法弄清楚如何表示负值。
答案 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
硬编码为可在此处使用的最大负值。如果需要,你可以做一些更复杂的事情。