我如何返回多个行计数

时间:2018-09-10 03:36:00

标签: mysql spring spring-data-jpa

我有三个实体,用户,规则和活动

具有以下关系,一个规则具有许多活动(双向) 许多用户有很多活动(双向),服务器使用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模型代码。

表是用户,活动,规则和User_Activity User table

Activity table

Rule table

User Activity table

1 个答案:

答案 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适当地。