我有一个这样的表:
ID | value
----------
1 | -3
2 | -4
3 | 5
4 | 2
我想像这样在 mysql 中显示直方图:
ID | value | histogram
-------------------------
1 | -3 | ***
2 | -4 |****
3 | 5 | *****
4 | 2 | **
我不知道如何表示负值。
最佳答案
这可以通过一些字符串操作猴子业务来完成。但是您需要使用等宽字体显示生成的文本字符串。在许多字体中,空格字符占用的空间比星号字符少,因此如果以这种方式显示这些星号串,零点将不会正确对齐。
首先,表达式 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
作为将在这里工作的最大负值。如果需要,您可以做一些更复杂的事情。
关于具有负值的mysql直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461025/