我得到这个错误: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