在JPQL

时间:2015-09-03 13:25:20

标签: jpa jpql

我想计算JPQL中的空值但计数("列"为null然后...结束时的情况)不能仅在MYSQL上工作,我不想要使用count(*)是什么解决方案??

String jpql ="select c.commande.user.login ,count(CASE WHEN c.commande.commandeTms is Null THEN 1 else 0 END) AS count1   from Designation c GROUP BY c.commande.user.login";

here my database

2 个答案:

答案 0 :(得分:1)

在这里:我使用CriteriaBuilder来计算它们...结果,你得到一个包含用户登录和计数元素的元组列表......你可能想要更改名称和"计算案例& #34;根据您的需求:

public List<Tuple> test() {
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<Tuple> cq = cb.createQuery(Tuple.class);
    Root<Designation> designation = cq.from(Designation.class);

    Join<Designation, Commande> commande = designation.join("commande");
    Join<Commande, User> user = commande.join("user");

    Expression expr = commande.get("commandeTms");

    cq.multiselect(user.get("login").alias("login"), 
            cb.sum(cb.<Long>selectCase().when(expr.isNotNull(), 1L).otherwise(0L)).alias("NotNull"),
            cb.sum(cb.<Long>selectCase().when(expr.isNull(), 1L).otherwise(0L)).alias("Null"));
    cq.groupBy(user.get("login"));

    Query query = entityManager.createQuery(cq);
    return query.getResultList();
}

答案 1 :(得分:0)

您可以对此案例使用SUM聚合函数

String jpql ="SELECT c.commande.user.login, SUM(CASE WHEN c.commande.commandeTms IS NULL THEN 1 ELSE 0 END) AS count1 FROM Designation c GROUP BY c.commande.user.login";