在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查询不同,尽管它返回正确的值。
1条答案
按热度按时间i7uq4tfw1#
你发布的查询看起来是正确的。这是最好的。不能用hql或jpa标准api重现完全相同的sql。事实上,sql查询的语法是特定于mysql的,并且只起作用,因为mysql没有本机布尔支持,但是将其建模为整数1和0。sql对此进行建模的标准方法是使用聚合函数拒绝null的事实,并在表达式未满足条件时使用case-when来生成null。