【发布时间】:2020-12-02 22:11:04
【问题描述】:
假设我有两个具有一对多关系的表。
表 A(用户): 标识 INT, 名称文本
表 B(技能): 标识 INT, user_id INT, 技能名称文本, 技能等级INT
每个用户可能拥有多种技能。而现在我想把有一定技能的用户聚集到一定的水平,也许是所有技能都符合条件的用户。
例如,假设我的数据库中有以下数据:
用户:
id | name
1 | Merlin
2 | Morgan
技能:
id | user_id | skill_name | skill_level
1 | 1 | Fireball | 2
2 | 1 | Thunderbolt | 3
2 | 2 | Thunderbolt | 2
2 | 2 | Firestorm | 1
2 | 2 | Curse | 3
如果我搜索雷电2级或以上的用户,我应该得到梅林和摩根;如果我搜索既懂雷电1级以上又懂诅咒2级以上的用户,那么应该只有摩根出现。
另外,我希望结果还可以包含用户拥有的所有技能的内容。现在我正在使用
ARRAY_AGG(JSON_BUILD_OBJECT('skill_name', skill_name, 'skill_level', skill_level') 按用户 id 收集所有技能。但我不知道如何根据我掌握的技能过滤数据。
【问题讨论】:
标签: sql json postgresql inner-join having-clause