0

我是 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);

此查询为我返回特定专辑 ID 的项目,如何改进我的 RQL 查询,以便它返回给我平均字段值,如上面的 SQL 查询。

4

1 回答 1

2

没有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 周期和内存。

也就是说,不要养成使用SqlPassthroughQueryas 的习惯,这意味着您不会尽可能多地使用存储库缓存,这可能对您的应用程序有害。

于 2018-11-21T10:34:09.780 回答