ich diesen Fehler:SQL ORDER BY-Klausel verursacht GROUP BY/Aggregat Fehler
PG::GroupingError: ERROR: column "relationships.created_at" must appear in the GROUP BY clause or be used in an aggregate function
aus dieser Abfrage:
last_check = @user.last_check.to_i
@new_relationships = User.select('*')
.from("(#{@rels_unordered.to_sql}) AS rels_unordered")
.joins("
INNER JOIN relationships
ON rels_unordered.id = relationships.character_id
WHERE EXTRACT(EPOCH FROM relationships.created_at) > #{last_check}
ORDER BY relationships.created_at DESC
")
Ohne die ORDER BY-Linie, es funktioniert gut. Ich verstehe nicht, was die GROUP BY-Klausel ist. Wie bekomme ich es funktioniert und immer noch von relationship.created_at bestellen?
EDIT
Ich verstehe Sie GROUP BY relationships.created_at
können. Aber ist Gruppieren nicht unnötig? Ist das Problem, dass relationship.created_at
nicht in der SELECT
enthalten ist? Wie schließt du es ein? Wenn Sie schon eine INNER JOIN
mit relationships
gemacht haben, warum ist die Hölle nicht relationships.created_at
im Ergebnis ??
Ich habe gerade festgestellt, dass dies alles passiert, weil die Protokolle zeigen, dass die Abfrage mit SELECT COUNT(*) FROM....
beginnt. Also ist COUNT die Aggregatfunktion. Aber ich habe nie ein COUNT angefordert! Warum beginnt die Abfrage damit?
EDIT 2
Ok, scheint dies wegen des faulen anfragende zu geschehen. Das erste, was @new_relationships passiert, ist @new_relationships.any?
. Dies betrifft die Abfrage und wandelt sie in eine Zählung um. Die Frage ist also, wie kann ich die Abfrage so ausführen, wie ursprünglich geplant? Und auch um zu überprüfen, ob @new_relationships leer ist, ohne die SQL-Abfrage zu beeinflussen?
Mögliche Duplikat [Gibt es eine \ _VALUE Fähigkeit für MySQL 5.6?] (Http://stackoverflow.com/questions/37089347/is-there-any-value-capacity-for-mysql-5-6) – e4c5
Bei GROUP BY (und SELECT DISTINCT und UNION) können nur SELECT-Listenelemente in ORDER BY angegeben werden. – jarlh