有一个users
表
id name role points
1 abc admin 50
2 xyz writer 25
3 efg student 10
4 ghi x_role 7
5 abc2 admin 23
和另一个参与者
表
id participants
1 {"admin":[1], "writer":[2], "student": [], "x_role": []}
2 {"admin":[1,5], "writer":[], "student": [3], "x_role": [4]}
现在我必须根据用户表中存在的管理员+作者+所有角色的值来计算每个参与者的分数。
结果应该是
Participants_id Score
2 90
1 75
最佳答案
您可以使用以下解决方案:
-- detailled result
SELECT p.id, GROUP_CONCAT(u.name SEPARATOR ', ') AS participants, SUM(u.points) AS score
FROM participants p INNER JOIN users u ON JSON_CONTAINS(JSON_EXTRACT(participants, CONCAT("$.", u.role)), CAST(u.id AS JSON), '$') = 1
GROUP BY p.id
ORDER BY p.id
-- expected result
SELECT p.id AS Participants_id, SUM(u.points) AS Score
FROM participants p INNER JOIN users u ON JSON_CONTAINS(JSON_EXTRACT(participants, CONCAT("$.", u.role)), CAST(u.id AS JSON), '$') = 1
GROUP BY p.id
ORDER BY p.id
关于mysql - 如何加入 JSON 键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59633694/