我有3个表:person_tag(个人ID,标签),interest_tag(兴趣ID,标签),skill_tag(skill_id,标签)。就像我想为兴趣和技能使用一张标签表一样,我需要将它们分开。以下示例数据:
+-----------+-------------+
| person_id | tag |
+-----------+-------------+
| 1 | x |
| 1 | y |
| 1 | z |
+-----------+-------------+
+-------------+-------------+
| interest_id | tag |
+-------------+-------------+
| 10 | x |
| 20 | y |
| 20 | z |
+-------------+-------------+
+-------------+-------------+
| skill_id | tag |
+-------------+-------------+
| 100 | x |
| 100 | y |
| 100 | z |
| 900 | a |
+-------------+-------------+
我想编写一个查询,该查询针对给定的person_id(例如1)的相关性返回如下结果。注意“ a”没有出现在以下结果中:
+-------------+-------------+-------------+
| id | typ | score |
+-------------+-------------+-------------+
| 100 | skill | 3 |
| 20 | interest | 2 |
| 10 | interest | 1 |
+-------------+-------------+-------------+
我怀疑UNION将成为我的朋友,但不太确定如何编写查询。有人有建议吗?
答案 0 :(得分:0)
您可以将union all
与group by
表达式一起使用
select skill_id , 'skill' as typ, count( skill_id ) as score
from skill_tag
group by skill_id
union all
select interest_id , 'interest' as typ, count(interest_id) as score
from interest_tag
group by interest_id
order by score desc
P.S。顺便说一句,您不需要person_tag
表。
答案 1 :(得分:0)
是的工会可以工作
select interest_id as id,count(*) as score, 'Interest' as typ from interest group by interest_id
union
select skill_id as id,count(*) as score, 'Skill' as typ from skill group by skill_id;