Wie verwenden Sie mehrere Aggregatfunktionen gleichzeitig in Rails / ActiveRecord?

7

Ich möchte mehrere Aggregatfunktionen gleichzeitig ausführen, zB um die max- und min-IDs nach Status gruppiert zu bekommen:

%Vor%

Das funktioniert nicht (zumindest mit Rails 3.1.1) - Sie erhalten einen Fehler beim minimalen Aufruf, der besagt, dass er nicht auf Fixnum definiert ist.

%Vor%

Ich könnte root sql dafür machen - aber ich frage mich, ob es eine höhere Ebene / Rails-Option gibt ...

Danke, Chris

    
Chris Kimpton 11.11.2011, 21:28
quelle

3 Antworten

13

Ich glaube, @topek hat Recht, dass Sie die Berechnungsfunktionen nicht so verketten können. Ich denke, Sie müssen SQL in einem select -Prädikat verwenden, z. B .:

%Vor%

Ich habe das gerade in einem eigenen Projekt getestet und es scheint wie erwartet zu funktionieren.

    
Jordan Running 11.11.2011, 21:50
quelle
12

Ich hatte ein ähnliches Problem, das ich gelöst habe, indem ich in Rails 4 group with pluck benutzt habe. Zum Beispiel

%Vor%

Funktioniert auch mit having, order usw. und mit berechneten Spalten.

%Vor%

Prost

    
Andrew Pietsch 30.10.2014 01:08
quelle
3

Ich denke nicht, dass dies mit diesen Aggregatfunktionen möglich ist, da sie einen Wert und keinen Bereich zurückgeben, siehe Dokumentation . Sie alle verwenden die Methode calculate, die, wie Sie sehen, eine Zahl zurückgibt:

%Vor%

Wenn Sie dies tun möchten, müssen Sie die Abfrage manuell erstellen.

Hier ist ein Beispiel:

%Vor%     
topek 11.11.2011 21:39
quelle