在 MySQL 中,我可以使用以下条件求和查询来计算行数,按特定条件分组:
SELECT SUM(synced=true) AS sum_a, SUM(synced=false) AS sum_b from test_table where name = "xyz";
我正在尝试将其翻译成等效的 CriteriaQuery
,但是,我无法这样做。 CriteriaQuery
等效项如何查找?
到目前为止,我最接近的是使用带有 multiselect
表达式的 selectCase
函数,如下所示:
criteriaQuery.multiselect(
criteriaBuilder.sum(
criteriaBuilder.<Number>selectCase().when(/* conditions for sum_a */), 1
).otherwise(0)
).alias("sum_a"),
criteriaBuilder.sum(
criteriaBuilder.<Number>selectCase().when(/* conditions for sum_b */), 1
).otherwise(0)
).alias("sum_b"),
然而,上述方法与开头提到的 SQL 查询不同,即使它返回正确的值。
答案 0 :(得分:0)
您发布的查询看起来是正确的。那就好办了。您无法使用 HQL 或 JPA Criteria API 重现完全相同的 SQL。事实上,SQL 查询的语法是特定于 MySQL 的,并且仅因为 MySQL 没有原生布尔支持才有效,而是将其建模为整数 1 和 0。对此建模的 SQL 标准方法是使用聚合函数是null 拒绝并使用 case when 表达式在您的条件不满足时产生 null。
true