我是ATG的新手,我有个问题。如何编写提供数据的RQLQuery,例如这个SQL查询?
select avg(rating) from rating WHERE album_id = ?;我试着这样做:
RqlStatement statement;
Object rqlparam[] = new Object[1];
rqlparam[0] = album_Id;
statement= RqlStatement.parseRqlStatement("album_id= ? 0");
MutableRepository repository = (MutableRepository) getrMember();
RepositoryView albumView = repository.getView(ALBUM);这个查询为特定的album_id返回一个项,如何改进我的RQL查询,以便它向我返回平均字段值,就像上面的SQL一样。
发布于 2018-11-21 10:34:09
没有允许计算查询中项的平均值的RQL语法。因此,您有两个选择。您可以执行当前语句:
album_id= ? 0然后循环遍历生成的RepositoryItem[]并自己计算平均值(这在大型数据集上可能很费时,意味着您必须将所有结果加载到内存中,所以可能不是最佳解决方案),或者您可以实现执行的SqlPassthroughQuery。
Object params[] = new Object[1];
params[0] = albumId;
Builder builder = (Builder)view.getQueryBuilder();
String str = "select avg(rating) from rating WHERE album_id = 1 group by album_id";
RepositoryItem[] items =
view.executeQuery (builder.createSqlPassthroughQuery(str, params));这将在数据库上执行平均计算(它非常擅长这样做),并在应用程序中节省CPU周期和内存。
尽管如此,不要养成使用SqlPassthroughQuery的习惯,因为这意味着您没有那么多地使用存储库缓存,这可能对您的应用程序有害。
https://stackoverflow.com/questions/53390081
复制相似问题