【问题标题】:sum of rows after group by in query dsl or jpql在查询 dsl 或 jpql 中分组后的行总和
【发布时间】:2017-04-11 03:56:10
【问题描述】:

我正在尝试对分组后的表格行求和,让我用一个例子来解释我的问题:

1) 我需要按名称计算总费用,部门。我可以用 group by 做到这一点,简单易行。

按名称:

select e.Employee_name, sum(expenses) 
from Employee e 
group by Employee_name

按部门:

select e.dept, sum(expenses) 
from Employee e 
group by dept

这是我在 JPA 上苦苦挣扎的地方。

2) 我需要按姓名或部门分组时计算总费用。 使用本机 SQL,我可以在 from 子句中进行内部查询,如下所示:

select sum(employeeExpense) 
from (
   select e.Employee_name, sum(expenses) as employeeExpense 
   from Employee e 
   group by Employee_name
 ) X

我坚持使用第 2 步来解决这个问题 Jpa ,有没有办法在 jpa 或查询 dsl 中做到这一点?

【问题讨论】:

  • 你可以使用 createQuery ,它会返回你想要的,它会根据你的查询返回给你 object [] 或 object 所以看看这个链接stackoverflow.com/questions/3449719/…
  • @a_horse_with_no_name:更正了我的查询。

标签: hibernate jpa jpql querydsl


【解决方案1】:

所以我在这里只给你一种查询方法 使用 createquery 它会返回给你类似的东西

select e.Employee name , sum(expenses) 
from Employee e 
group by Employee name

@Autowired
private EntityManager em;
List<Object[]> list =    em.createQuery("select e.EmployeeName , sum(e.exprenses) from Employee e group  by e.EmployeeName").getResultList();

每个列表元素都是 Object[] 和 Object[],第一个元素是员工姓名,第二个元素是 sum(expenses)

【讨论】:

  • 我在问题的第 2 步中寻找 jpql 版本的查询。
  • 第二步只是把所有员工费用汇总你为什么这样做,只需从表中使用 select sum() 将它们全部取出,它将起作用 select sum(expenses) from employee 它会给你所有员工费用汇总
  • 对不起,如果我不清楚,我需要在分组后计算总费用。我需要按员工姓名和部门分组的总费用。有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 2020-08-27
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多