【问题标题】:Query Dsl get grouped objects查询 Dsl 获取分组对象
【发布时间】:2015-03-09 13:07:55
【问题描述】:

我有这些类/实体:

class Item {
  int id;
  String name;
}

class Sale {
 Item item;
 double value;
}

如何使用 Query DSL 获得按商品分组的销售额总和?

我可以运行这个查询:

QSale sale = QSale.sale;
QItem item = QItem.item;

from(sale).join(sale.item, item).groupBy(item).list(item.id, sale.value.sum())

但这仅返回项目 ID 及其总和,但如何获取整个 Item 对象及其总和?

如果我将查询写成:

from(sale).join(sale.item, item).groupBy(item).list(item, sale.value.sum())

我会得到:

选择列表中的“Item.name”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

【问题讨论】:

    标签: java querydsl


    【解决方案1】:

    这应该可以工作

    QSale sale = QSale.sale;
    QItem item = QItem.item;
    
    query.from(sale)
      .join(sale.item, item)
      .list(item.id, sale.value.sum())
      .transform(GroupBy.groupBy(item).as(GroupBy.sum(sale.value)))
    

    GroupBy 开始于 groupBy 结束的地方。它通过结果后处理提供深度聚合功能http://www.querydsl.com/static/querydsl/3.6.2/reference/html/ch03s02.html#d0e2185

    【讨论】:

    • 函数的重要部分是“..聚合查询结果在内存中。”。组合是在 java 应用程序中完成的,而不是在数据库服务器中完成的。所以很多被转移到应用程序。只需将它与小型结果集一起使用!
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多