Выбирающий Минимум/Максимум для каждой группы в ActiveRecord

Если возможными значениями данных являются строчные буквы a-z или цифры, вы можете также захватить первые 3 символа, используя группу захвата и класс символов [a-z0-9], и после этого поставить точку с запятой. Если может быть более 1 символа, вы можете использовать квантификатор + для класса символов, например [a-z0-9]+

, а затем заменить его на первую группу захвата.

Найдите, что

^([a-z0-9];[a-z0-9]);

Заменить на

$1

[ 117] Regex demo

Или с помощью \K вы можете найти ^[a-z0-9];[a-z0-9]\K; и оставить «Заменить на пустое».

11
задан ekad 3 August 2017 в 16:20
поделиться

2 ответа

Table.minimum(:price, :group => :type)

См. http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-minimum для больше.

12
ответ дан 3 December 2019 в 09:42
поделиться

Можно использовать #find_by_sql, но это подразумевает возврат объекта модели, который не мог бы быть тем, что Вы хотите.

Если Вы хотите перейти пустые к металлу, можно также использовать #select_values:

data = ActiveRecord::Base.connection.select_values("
        SELECT f.type, f.variety, f.price
        FROM (SELECT type, MIN(price) AS minprice FROM table GROUP BY type ) AS x
        INNER JOIN table AS f ON f.type = x.type AND f.price = x.minprice")
puts data.inspect
[["type", "variety", 0.00]]

ActiveRecord является просто инструментом. Вы используете его, когда это удобно. Когда SQL делает лучшее задание, Вы используете это.

0
ответ дан 3 December 2019 в 09:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: