2014-12-13 78 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作爲最大的負值將在這裏工作。如果需要,你可以做更復雜的事情。