Условная группа по SQL-запросу

0

Я хотел бы отсортировать запрос базы данных:

number value DESCENDING с учетом свойства String из другого поля

Что-то вроде:

ORDER BY money DESC,
currency = 'EUR'

Пример:

money    |     currency
-----------------------
200      |     EUR
300      |     USD
500      |     USD
100      |     EUR
400      |     EUR

Я хотел бы сортировать money по убыванию, только когда currency равна EUR. Я не хочу рассматривать другую валюту при сортировке, например:

money    |     currency
-----------------------
400      |     EUR
200      |     EUR
100      |     EUR
300      |     USD
500      |     USD

Мне не нужна сортировка после EUR. Может быть абсолютно случайным

Теги:

2 ответа

2
Лучший ответ

Вы можете использовать несколько ключей в следующем order by:

order by (currency = 'EUR') desc,
         money desc

Это упорядочивает оставшиеся валюты в порядке убывания. Это побочный продукт. Если вы специально хотите, чтобы они были случайными:

order by (currency = 'EUR') desc,
         (case when currency = 'EUR' then money end) desc,
         rand()

Но это кажется излишним.

  • 0
    Я проверим это и вернусь к вам с ответом
  • 0
    работает как шарм. Мне нужно как-то перевести его на queryDSL, кажется хитрым
1

Если вам действительно нужно условие заказа только по значению "EUR", вы можете сделать что-то вроде этого:

 ORDER BY (currency = 'EUR') * money DESC

Ещё вопросы

Сообщество Overcoder
Наверх
Меню