2014-12-13 3 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

Это можно сделать с помощью некоторых операций по обезболиванию струн. Но вам нужно будет отобразить полученные текстовые строки с моноширинным шрифтом. Во многих шрифтах пробельные символы занимают меньше места, чем звездные символы, поэтому нулевые точки не будут выравниваться вправо, если вы покажете эти строки звезд таким образом.

Во-первых, выражение 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 как наибольшее отрицательное значение, которое будет работать здесь. Вы могли бы сделать что-то более сложное, если вам нужно.

Смежные вопросы