V PostgreSQL nemůžete použít výraz s aliasem v pořadí podle. Fungují tam pouze obyčejné aliasy. Váš dotaz by měl vypadat takto:
select distinct
l2.*,
l.user_id as l_user_id,
l.geopoint_id as l_geopoint_id
from locations l
left join locations l2 on l.geopoint_id = l2.geopoint_id
where l.user_id = 8
order by l2.geopoint_id, l.user_id = l2.user_id desc;
Předpokládám, že máte na mysli l2.user_id=l.user_id
měl by jít první.
Toto je relevantní zpráva na PostgreSQL-general mailing listu. Následující text je v dokumentaci ORDER BY
klauzule:
Každý výraz může být názvem pořadové číslo výstupního sloupce (SELECT položka seznamu), nebo to může být libovolný výraz vytvořený z vstupního sloupce hodnoty .
Při použití výrazu tedy žádné aliasy.