Nedávno jsem potřeboval seřadit tabulku podle sloupce, jenž zastupoval cenu. Ne vždy však byl tento údaj vyplněn a objevovaly se proto i hodnoty NULL. To by nevadilo, pokud bych vyžadoval sestupné pořadí, tedy od největší ceny po nejmenší. Řádky s NULL by se v tomto případě ukázaly poslední. Já však toužil po přesném opaku. Jako první se měla projevit nejmenší cena. Tvrdohlavě však tuto příčku okupovaly hodnoty NULL a donutily mě začít hledat chytré řešení.
Vše lze pohodlně vyřešit s pomocí dotazu. Ten vypadá následovně:
SELECT cena FROM tabulka ORDER BY case when cena is null then 1 else 0 end, cena
Nejzajímavější je pochopitelně klauzule ORDER BY. S pomocí case vytvořím jednoduchou podmínku, jenž nahradí NULL za 1. Vyplněné ceny naopak zaměním za 0. Nyní jsem docílil toho, že řádky s NULL se ve výpisu objeví jako poslední. To odpovídá seřazení nul a jedniček dle defaultního (neuvedeného) vzestupného pořadí. Následně již zbývá vykonat poslední krok. Postarat se o správné začlenění řádků s uvedenou (neprázdnou) hodnotou. To je již velmi jednoduché, stačí do klauzule ORDER BY dosadit druhý sloupec (v mém konkrétním případě pojmenovaný jako cena). Ten si rovněž automaticky vyžádá vzestupné pořadí. Výsledkem je kýžený seznam s nejnižším číslem na svém počátku.