我有三个实体,用户,规则和活动
具有以下关系,一个规则具有许多活动(双向) 许多用户有很多活动(双向),服务器使用spring jpa来运行spring
我想显示一个用户从每个规则开始但没有完成多少活动,而对于SQL,此查询将从一个规则返回该活动
SELECT COUNT(*) FROM user_activity WHERE user_id=userId AND score<10 AND
activity_id IN (SELECT id FROM activity WHERE rule_id=ruleId);
我可以使用JPQL做到这一点,但是如何从每个规则中返回该计数呢? 因此我可以从每条规则中了解该用户有多少活动
如果有人需要,我也可以提供Java模型代码。
答案 0 :(得分:1)
我认为此查询可能是您想要的。它会找到与给定规则相关联的所有活动,然后加入尚未完成该活动的参与该活动的用户(我猜这就是得分<10表示的意思)
SELECT r.id, u.id, COUNT(a.id)
FROM rule r
JOIN activity a ON a.rule_id = r.id
JOIN user_activity ua ON ua.activity_id = a.id AND ua.score < 10
JOIN user u ON u.id = ua.user_id
GROUP BY r.id, u.id
很显然,您可以展开SELECT
以包括规则描述和用户名等内容。
我看不到“活动完成”是什么意思,因此我认为分数小于10。如果不是这种情况,则需要将联接更改为user_activity
适当地。