Ruby on Rails: pobieranie maksymalnej wartości z kolumny DB

125

Obecnie mogę wykonać proste zapytanie SQL w mojej bazie danych:

SELECT MAX(bar) FROM table_name

I wraca z maksymalną wartością w tej tabeli. Kiedy jednak wykonuję to, co uważam za równoważne wywołanie w Railsach, to nie działa. Dzwonię:

Bar.all(:select => "Max(bar)")

To po prostu wraca z:

[#<Bar >]

W kolumnie, do której dzwonię, jest seria numerów identyfikacyjnych, szukam największej. Czy jest inny sposób uzyskania dostępu do tego w Railsach?

keybored
źródło

Odpowiedzi:

272

Zakładając, że nazwa twojego modelu to Bari ma kolumnę o nazwie bar, to powinno działać:

Bar.maximum("bar")

Zobacz doskonałą sekcję Przewodniki po szynach w Obliczeniach, aby uzyskać więcej informacji.

Dylan Markow
źródło
Ah ha! Masz rację, to zrobiło. Sprawdzę twoją odpowiedź, gdy tylko SO mi na to pozwoli. Dzięki!
dźwięk z klawiszem
6

jeszcze jeden sposób

Bar.select("Max(bar) as max_bar").first.max_bar
Manish Kasera
źródło
5
Dlaczego chcesz to zrobić? Bardziej szczegółowe i wykonuje dokładnie to samo zapytanie, co Bar.maximum(:bar)więc nie widzę powodu, aby w ogóle „polecać” tę odpowiedź ...
nathanvda
19
na przykład, jeśli chcesz, aby zarówno wartość minimalna, jak i maksymalna:Bar.select("MAX(bar) max_bar, MIN(bar) min_bat").first.attributes
Shalev Shalit
Osoba zadająca pytanie chciała tylko max.
Chris Peters,
1
Udzielił poprawnej odpowiedzi na pytanie. Prawdopodobnie nie jest to najlepsza odpowiedź, ale nie zrobił z nią nic złego.
david0116