使用 Order By 和 join 时,Count distinct 不起作用

Count distinct doesn't work when using OrderBy & join

我有以下查询试图获取查询的计数:

var testQuery = Db
    .From<Blog>()
    .LeftJoin<BlogToBlogCategory>()
    .Where(x => x.IsDeleted == false)
    .OrderBy(x => x.ConvertedPrice);

var testCount = Db.Scalar<int>(testQuery.Select<Blog>(x => Sql.CountDistinct(x.Id)));

var results = Db.LoadSelect(testQuery.SelectDistinct());

它给出错误:

42803: column "blog.converted_price" must appear in the GROUP BY clause or be used in an aggregate function

问题似乎出在 orderby 语句上。如果我删除它,那么错误就会消失。为什么这个停止计数不同的工作?

我必须清除我喜欢这样做的所有查询的 orderby。它应该以这种方式工作吗?

我也才发现数错了。结果是 501 条唯一记录,testCount 是 538。

我做错了什么?

每当对 OrmLite 查询生成的内容有疑问时,您可以使用 BeforeExecFilter 在执行之前检查 DB 命令,或者仅将查询输出到您可以使用的控制台:

OrmLiteUtils.PrintSql();

你不应该将 OrderBy 与像 COUNT 这样的聚合标量函数一起使用,它是没有意义的,并且在你的情况下会失败,因为它需要包含连接 table 的 GROUP BY 子句查询。

你专门查询 COUNT(DISTINCT Id) 如果你想要查询的行数,你可以使用:

var testCount = Db.RowCount(testQuery);

如果您想使用 COUNT(*),您可以使用:

var testCount = Db.Count(testQuery);