如何在某些单元格上使用CriteriaQuery SUM自定义操作?
考虑你有表T,字段A和B.
使用常规SQL,我可以这样做:
SELECT SUM(A * (100.0 - B) / 100.0) AS D FROM T;
而且我会得到我所期望的。
但是,我不确定如何使用CriteriaQuery。
我知道如何对1个字段求和,但不知道如何在一行中的多个字段上对某些数学表达式求和。
CriteriaBuilder
接口提供以下算术函数:
- 另外:
sum(a, b)
- 减法:
diff(a, b)
- 乘法:
prod(a, b)
- 分裂:
quot(a, b)
其中b
参数可以是表达式和/或文字。
至于查询,这里是一个以人类可读forms编写的例子:
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery q = cb.createQuery(Number.class); Root t = q.from(T.class); // build SUM(A * (100.0 - B) / 100.0) expression Expression diff = cb.diff(100.0, t. get("B")); Expression prod = cb.prod(t. get("A"), diff); Expression quot = cb.quot(prod, 100.0); Expression sum = cb.sum(quot); q.select(sum.alias("D")); System.out.println(em.createQuery(q).getSingleResult());
您还可以将查询构建为一行:
q.select(cb.sum(cb.quot(cb.prod(t.get("A"), cb.diff(100.0, t. get("B"))), 100.0)).alias("D"));
我希望它能澄清你的疑虑。