我得到這個錯誤:SQL ORDER BY子句造成GROUP BY /總誤差
PG::GroupingError: ERROR: column "relationships.created_at" must appear in the GROUP BY clause or be used in an aggregate function
從該查詢:
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
")
沒有ORDER BY行,它工作正常。我不明白什麼是GROUP BY子句。我如何得到它的工作,仍然通過relationships.created_at排序?
編輯
我明白可以GROUP BY relationships.created_at
。但不是不必要的分組? SELECT
中是否包含relationship.created_at
的問題?你如何包含它?如果你已經完成INNER JOIN
與relationships
,爲什麼地獄不是relationships.created_at
包括在結果??
我剛剛意識到這一切都是因爲日誌顯示查詢以SELECT COUNT(*) FROM....
開頭。所以COUNT是聚合函數。但我從來沒有要求COUNT!爲什麼查詢從那開始?
EDIT 2
好了,這似乎是因爲懶惰查詢的要發生。 @new_relationships發生的第一件事是@new_relationships.any?
這會影響查詢並將其變爲計數。所以我想這個問題是,我如何強制查詢運行最初的目的?並且還要檢查@ new_relationships是否爲空而不影響sql查詢?
的可能的複製[有沒有\ _Value爲MySQL 5.6的能力?](http://stackoverflow.com/questions/37089347添加組/ is-there-any-value-capability-for-mysql-5-6) – e4c5
當GROUP BY(以及SELECT DISTINCT和UNION)時,只有選擇列表項可以在ORDER BY中指定。 – jarlh