使用 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);
我有以下查询试图获取查询的计数:
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);