RQLQuery怎么写?

How write RQLQuery?

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

此查询 returns 我是特定 album_id 的项目,我如何改进我的 RQL 查询,以便它 returns 对我来说是平均字段值,如 SQL上面的查询。

没有 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 的习惯,因为这意味着您不会经常使用存储库缓存,这可能对您的应用程序有害。