我收到此错误:
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子句是什么。如何让它工作并仍然按关系排序.created_at?
编辑
我知道你可以GROUP BY relationships.created_at
。但不是不必要的分组吗?问题是relationship.created_at
中未包含SELECT
的问题吗?你怎么包括它?如果您已经使用INNER JOIN
完成relationships
,为什么结果中不包含relationships.created_at
?
我刚刚意识到这一切都在发生,因为日志显示查询以SELECT COUNT(*) FROM....
开头。所以COUNT是聚合函数。但我从未要求过COUNT!为什么查询以此开头?
编辑2
好吧,这似乎是因为懒惰的查询而发生的。 @new_relationships发生的第一件事是@new_relationships.any?
这会影响查询并将其转换为计数。所以我想问题是,如何强制查询按原计划运行?还要检查@new_relationships是否为空而不影响sql查询?
答案 0 :(得分:1)
您只需要按照订单
添加分组last_check = @user.last_check.to_i
@new_relationships =
User.select('"rels_unordered".*')
.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}
GROUP BY relationships.created_at
ORDER BY relationships.created_at DESC ")
答案 1 :(得分:0)
要求在FROM
(基本上是子选项)中的EXTRACT
条款之后GROUP BY
。有办法绕过它,但我发现做FROM relationships.created_at GROUP BY id
工作往往更容易。尝试:... ORDER BY
或您在该表中使用的任何索引列。您的 from django.contrib.admin.utils import NestedObjects
似乎与自身发生冲突。通过对子选择数据进行分组,它应该失去冲突。