我已经在rust中实现了mysql查询,但是我选择导致了一个错误。这是错误the trait
diesel::expression::MixedAggregatesdiesel::expression::is_aggregate::Yesis not implemented for
diesel::expression::is_aggregate::No`什么问题,我如何解决这个问题?
let sub = progress::table
.filter(progress::user.eq(1))
.group_by(progress:: otherid)
.select((diesel::dsl::max(progress::updated), progress::otherid, progress::onemoreid));
SELECT otherid, onemoreid, MAX(updated) AS newest_updated
FROM progress
WHERE user = 1
GROUP BY otherid
编辑:当我在select中没有progress::onemoreid时,错误不会发生。
1条答案
按热度按时间np8igboo1#
柴油机文件的相关部分为以下段落:
Diesel遵循postgresql的group by语义,这意味着出现在group by子句中的任何列都被认为是聚合的。如果主键是group by子句的一部分,则相应表中的每个列都被认为是聚合的。Select子句不能混合聚合和非聚合表达式。
这个限制是因为否则你的查询可能会返回不确定的结果。毕竟,当查询产生多个可能的值时,应该选择
onemoreid
的哪个值。MySQL允许编写这样的查询,但它们可能会返回不确定的结果。这意味着只返回一些值。甚至可能使用相同的数据执行相同的查询会返回不同的值。