Es kann in einer Auswahlabfrage möglich sein (möglicherweise mit so etwas wie case when
obwohl ich nicht sicher bin, ob das in order by
erlaubt ist Klausel selbst, YMMV abhängig vom DBMS), aber es ist selten eine gute Idee, Berechnungen pro Zeile zu verwenden, wenn Sie möchten, dass Ihre Datenbank gut skaliert, wenn Tabellen größer werden ("nicht die Leistung eines einbeinigen Schweins in einem Pferderennen haben") , wie es einer unserer DBAs eloquent ausdrückt).
In solchen Situationen richte ich eine zusätzliche (indizierte) Spalte ein, um das Maximum zu halten und sicherzustellen, dass die Datenintegrität gewahrt bleibt, indem ich einen Insert/Update-Trigger verwende, um diese neue Spalte auf das Maximum der anderen drei zu zwingen.
Da die meisten Datenbanktabellen weitaus häufiger gelesen als geschrieben werden, amortisiert sich der Rechenaufwand über alle Lesevorgänge. Die Kosten fallen nur an, wenn die Daten aktualisiert werden und die Abfragen unglaublich schnell werden, da Sie nach einer einzelnen, indizierten Spalte bestellen:
select f1, f2, f3 from t order by fmax desc;