Nie można używać zmiennych wiązania (parametrów) do odwoływania się do kolumn w klauzuli ORDER BY. Możesz jednak użyć zmiennej bind w wyrażeniu takim jak:
@Query("select * from coin ORDER BY
CASE :order
WHEN 'percent_change_24h' THEN percent_change_24h
WHEN 'other_column_name' THEN other_column_name
END asc limit :numberOfCoins")
fun getAllTop(order: String, numberOfCoins: Int): Flowable<List<CoinDB>>
Będziesz musiał dodać osobną klauzulę WHEN do instrukcji CASE dla każdej kolumny/wyrażenia, według których chcesz sortować, i możesz potrzebować lub chcieć dodać klauzulę ELSE w sytuacjach, gdy zmienna :order bind nie pasuje do żadnego z Twoje standardowe przypadki.
Ograniczenie zmiennych wiążących obowiązuje również w przypadku klauzuli WHERE i projekcji (lista wyboru). Zmienna Bind ma swoje własne wartości w twoich przykładach albo String albo Int odpowiednio dla :order i :numberOfCoins.