Du bør egentlig enten konvertere alle data til en fælles enhed (f.eks. bytes) eller tilføje en kolonne, der indeholder en "måleenhed" og holde selve størrelseskolonnen numerisk.
Når det er sagt, skulle det følgende fungere på data, der ender med enten GB/MB/KB eller B.
select 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 |
+-------+------------+