Например так:
Идея:
Можно почитать: http://code.openark.org/blog/mysql/rotating-sql-graphs-horizontally
SELECT id,CONCAT(REPEAT('-',(val*10+1)-1),'#',REPEAT('-',22-(val*10+1))) AS bar FROM sample_values LIMIT 20 +----+------------------------+ | id | bar | +----+------------------------+ | 0 | ----------#----------- | | 1 | -----------#---------- | | 2 | ------------#--------- | | 3 | -------------#-------- | | 4 | --------------#------- | | 5 | ---------------#------ | | 6 | ----------------#----- | | 7 | ----------------#----- | | 8 | -----------------#---- | | 9 | ------------------#--- | | 10 | ------------------#--- | | 11 | -------------------#-- | | 12 | -------------------#-- | | 13 | --------------------#- | | 14 | --------------------#- | | 15 | --------------------#- | | 16 | --------------------#- | | 17 | --------------------#- | | 18 | --------------------#- | | 19 | -------------------#-- | | 20 | -------------------#-- | +----+------------------------+ 20 rows in set (0.00 sec)Как видно из примера, для продолжительных графиков( ограничение число отображаемых строк в терминале) хотелось бы иметь более привычный горизонтальный график ( горизонтальная ось - х) - это возможно и строится такой график с помощью техники string unwalking. (пример ниже)
mysql> SELECT * from characters; +---+ | c | +---+ | h | | e | | l | | l | | o | +---+ 5 rows in set (0.00 sec) mysql> SELECT GROUP_CONCAT(c separator '') AS s FROM characters; +-------+ | s | +-------+ | hello | +-------+ 1 row in set (0.00 sec)
Идея:
- задать удобные граничные условия удобные для отображение (фикс. длинна, кол-во строк и т.д.)
- построить строку по методу показанному выше (техника walking-string)
- после построение, осуществить её поворот - транспонирование (техника string unwalking)
SELECT GROUP_CONCAT(SUBSTRING(bar,tinyint_asc.value,1) ORDER BY id SEPARATOR '') AS `Sinus graph` FROM tinyint_asc INNER JOIN ( SELECT id, CONCAT(REPEAT('-',(val*10+1)-1),'#',REPEAT('-',22-(val*10+1))) AS bar FROM sample_values LIMIT 50) sel_graph WHERE tinyint_asc.value BETWEEN 1 AND CHAR_LENGTH(bar) GROUP BY tinyint_asc.value ORDER BY tinyint_asc.value DESC; +-----------------------------------------------------------------+ | Sinus graph | +-----------------------------------------------------------------+ | ----------------------------------------------------------------| | -------------######---------------------------------------------| | -----------##------###------------------------------------------| | ---------##-----------#-----------------------------------------| | --------#--------------##---------------------------------------| | ------##-----------------#--------------------------------------| | -----#--------------------#-------------------------------------| | ----#----------------------#------------------------------------| | ---#------------------------#-----------------------------------| | --#--------------------------#----------------------------------| | -#----------------------------#---------------------------------| | #------------------------------#-------------------------------#| | --------------------------------#-----------------------------#-| | ---------------------------------#---------------------------#--| | ----------------------------------#-------------------------#---| | -----------------------------------##----------------------#----| | -------------------------------------#--------------------#-----| | --------------------------------------#-----------------##------| | ---------------------------------------#---------------#--------| | ----------------------------------------##-----------##---------| | ------------------------------------------##-------##-----------| | --------------------------------------------#######-------------| +-----------------------------------------------------------------+
Можно почитать: http://code.openark.org/blog/mysql/rotating-sql-graphs-horizontally
Комментариев нет:
Отправить комментарий