主要信息

  • 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';