将 SQL 查询转换为 JPQL 查询 - 具有特定文本值的属性的总和

Convert SQL query to JPQL query - sum number of attributes with a specific text value

我的SQL查询是

SELECT cust.*, sum(ord.status="Pending") as pendingOrderCount, sum(ord.status="Completed") as completedOrderCount
FROM customer cust
LEFT JOIN item_order ord ON ord.customer_id = cust.id 
WHERE cust.tenant_id = 1
GROUP BY cust.id

此查询适用于 MySql Workbench

所以本质上我想获取客户的所有属性,然后再添加两个别名,已完成订单的数量是该客户的订单数量,其中 order.status 是“完成”,每个客户的待处理订单

在我的 Spring Boot JPA 存储库 class 中,我正在尝试使用 JPQL 重新创建此查询。这是我的尝试:

@Query("select cust, sum(ord.status = 'Completed') as completedOrders, sum(ord.status = 'Pending') as pendingOrders from item_order ord LEFT JOIN ord.customer where customer id = 1)

我知道这是不正确的,我的 IDE 显示语法错误 ord.status = 'Completed' 和 ord.status = 'Pending'

在等号处。我一直在查看 JPQL 文档,但没有找到任何获得具有给定值的属性总和的示例,因此请使用一些帮助

我发现了如何根据属性在 JPQL 中的状态有条件地计算属性的数量

sum(case when ord.status = 'Completed' then 1 else 0 end) as completedOrders, sum(case when ord.status = 'Pending' then 1 else 0 end) as pendingOrders