主要信息
- answer_tb如下(其中answer_date表示创作日期、author_id指创作者编号、issue_id指回答问题编号、char_len表示回答字数);所有用户信息(author_date表示回答日期、author_id表示创作者id,answer_cnt表示回答问题个数),以上例子的输出结果如下
- 统计回答过教育类问题的用户里有多少用户回答过职场类问题
问题拆解
总体思路
- 连接问题信息表和回答信息表,取出回答教育类问题的用户的信息
- 分别取出两份相同的数据,找出同时含有职场类问题和教育类问题的用户的id去重统计
具体实现
- 通过issue_id连接answer_tb和issue_tb,取出issue_id和author_id,复制一份相同的数据
- 两份数据通过author_id连接取出其中即有教育类回答又有职场类回答的用户最后count distinct去重统计
其实t2中的on条件也可以放在最后用where实现同样的效果
SELECT COUNT(DISTINCT t2.author_id) AS num
FROM (
SELECT
author_id, issue_type
FROM answer_tb a
LEFT JOIN issue_tb i USING (issue_id)
) t1
LEFT JOIN (
SELECT author_id, issue_type
FROM answer_tb a
LEFT JOIN issue_tb i USING (issue_id)
) t2
ON t1.author_id = t2.author_id
AND t1.issue_type = 'Education'
AND t2.issue_type = 'Career';