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