Рельсы 5 - Упорядочивание по create_at, но показ нуля последний в другом столбце - PullRequest
0 голосов
/ 09 мая 2018

Использование Rails 5 с PostgreSQL.

Что я пытаюсь сделать:

У меня есть модель Service с атрибутами created_at и base_price.

Я бы хотел заказать их по дате создания, но если базовая цена равна nil, оставьте их в нижней части, также упорядоченные по созданию.

Я пробовал что-то вроде этого:

Service.order('created_at DESC, base_price NULLS LAST')

но это не достигает того, что я ищу.

Любая помощь будет принята с благодарностью. Я знаю, что есть похожий вопрос, но нет объяснения, и мне трудно его реализовать. Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Используйте оператор case, чтобы указать все значения base_price, отличные от NULL, равными 1, и все значения base_price, равные NULL, равными 2, чтобы они сортировались как две группы, 1 и 2. Внутри групп вы можете отсортировать по убыванию созданного_представления.

Service.order('CASE WHEN base_price IS NULL THEN 2 ELSE 1 END, created_at DESC')
0 голосов
/ 09 мая 2018

Попробуйте что-то вроде следующего

SELECT field1, field2,
  CASE
    WHEN base_price IS NOT NULL THEN 1
    ELSE 0
  END 
  AS field3
FROM services
ORDER BY (field3 DESC, created_at DESC)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...