Sie sollten wirklich entweder alle Daten in eine gemeinsame Einheit umwandeln (z. B. Bytes) oder eine Spalte hinzufügen, die eine "Maßeinheit" enthält, und die Größenspalte selbst numerisch belassen.
Allerdings sollte das Folgende bei Daten funktionieren, die entweder mit GB/MB/KB oder B.
endenselect size
from t
order
by case when size like '%GB' then power(1024, 3) * substr(size, 1, length(size) - 2)
when size like '%MB' then power(1024, 2) * substr(size, 1, length(size) - 2)
when size like '%KB' then power(1024, 1) * substr(size, 1, length(size) - 2)
when size like '%B' then substr(size, 1, length(size) - 1)
end desc;
+-------+------------+
| size | bytes |
+-------+------------+
| 1GB | 1073741824 |
| 10MB | 10485760 |
| 100KB | 102400 |
| 1000B | 1000 |
+-------+------------+