Det kan være muligt at gøre i en udvalgt forespørgsel (evt. ved at bruge noget som case when
selvom jeg ikke er sikker på, at det er tilladt i order by
selve klausulen, YMMV afhængigt af DBMS), men det er sjældent en god ide at bruge beregninger pr. række, hvis du ønsker, at din database skal skaleres godt, efterhånden som tabeller bliver større ("ikke have præstationen som en etbenet gris i et hestevæddeløb" , som en af vores DBA'er veltalende udtrykker det).
I situationer som denne opsætter jeg en ekstra (indekseret) kolonne for at holde maksimum og sikre, at dataintegriteten opretholdes ved at bruge en indsæt/opdateringsudløser for at tvinge den nye kolonne til det maksimale af de tre andre.
Fordi de fleste databasetabeller læses langt oftere end skrevet, amortiserer dette omkostningerne ved beregningen på tværs af alle læsninger. Omkostningerne afholdes kun, når dataene er opdateret, og forespørgslerne bliver blændende hurtige, da du bestiller på en enkelt, indekseret kolonne:
select f1, f2, f3 from t order by fmax desc;