MySQL konvertiert Bytes in Kilobytes, Megabytes, Gigabytes

Ich habe eine Protokolltabelle, die verschiedene Dateigrößen in Bytes speichert. Ich möchte in der Lage sein, die Datenbank abzufragen und den kleinstmöglichen Gleitkommawert zurückzugeben, der in MB GB usw. konvertiert wurde. Gegenwärtig kann ich den Wert in MB zurückgeben, aber wie teile ich weiter auf den kleinsten Wert auf und hänge die Einheit an?

SELECT CONCAT( ROUND( SUM( data_transferred ) /1048576, 2 ) ,  ' MB' ) 
FROM  `logs`

Jede Hilfe wäre dankbar.

AKTUALISIEREN:

Aufgrund des von voodoo417 bereitgestellten Links habe ich meine Abfrage folgendermaßen aktualisiert: Dabei wird die relevanteste Dateigröße auf zwei Dezimalstellen ausgegeben und die Einheit angehängt (1000 Bytes, 1 KB, 500 MB, 2 GB usw.):

SET @bytes := (SELECT SUM(data_transferred) FROM wp_ddownload_statistics);

SELECT
    CASE
WHEN ABS(@bytes) < 1024 THEN CONCAT( ROUND( @bytes, 2 ), ' Bytes')
      WHEN ABS(@bytes) < 1048576 THEN CONCAT( ROUND( (@bytes/1024), 2 ), ' KB')
      WHEN ABS(@bytes) < 1073741824 THEN CONCAT( ROUND( (@bytes/1048576), 2 ), ' MB')
      WHEN ABS(@bytes) < 1099511627776 THEN CONCAT( ROUND( (@bytes/1073741824), 2 ), ' GB' )
      WHEN ABS(@bytes) < 1125899906842624 THEN CONCAT( ROUND( (@bytes/1099511627776), 2 ), ' TB')
      WHEN ABS(@bytes) < 1152921504606846976 THEN CONCAT( ROUND( (@bytes/1125899906842624), 2 ), ' PB' )
      WHEN ABS(@bytes) < 1180591620717411303424 THEN CONCAT( ROUND( (@bytes/1152921504606846976) ,2), ' EB' )
      WHEN ABS(@bytes) < 1208925819614629174706176 THEN CONCAT( ROUND( (@bytes/1180591620717411303424), 2), ' ZB' )
      WHEN ABS(@bytes) < 1237940039285380274899124224 THEN CONCAT( ROUND( (@bytes/1208925819614629174706176), 2), ' YB' )
      WHEN ABS(@bytes) < 1267650600228229401496703205376 THEN CONCAT( ROUND( (@bytes/1237940039285380274899124224), 2), ' BB' )
    END

Antworten auf die Frage(4)

Ihre Antwort auf die Frage