как я могу вернуть несколько строк - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть три объекта: пользователь, правило и действие

при следующих отношениях одно правило имеет много действий (двунаправленный) У многих пользователей много действий (двунаправленных), сервер с пружиной использует пружину jpa

Я хочу показать, сколько операций один пользователь запустил, но не завершил из каждого правила, при использовании 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 table

Activity table

Rule table

User Activity table

1 Ответ

0 голосов
/ 10 сентября 2018

Я думаю, что этот запрос, вероятно, то, что вы хотите. Он находит все действия, связанные с данным правилом, затем присоединяется к пользователям, участвующим в этом действии, которые не завершили его (я полагаю, что это означает, что оценка <10 указывает?) </p>

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...