牛客刷题 SQL193
统计回答过教育类问题的用户里有多少用户回答过职场类问题
https://www.nowcoder.com/share/jump/8193419321685109477515
错误点:一开始的思路是想统计issue_type='Education' AND issue_type='Career' 的用户数,但是数据表中的对应关系每个记录对应一个问题类型,未仔细查看数据表,思路有误
思路1:找到回答教育类问题(WHERE)的id(去重!),再子查询找到回答职场类问题的用户,只对出现在子查询中的用户名计数
代码:
SELECT
count(distinct author_id)
FROM
issue_tb AS a1
LEFT JOIN answer_tb AS a2 ON a1.issue_id = a2.issue_id
WHERE
issue_type = 'Education'
AND author_id in (
SELECT
author_id
from
issue_tb AS a1
LEFT JOIN answer_tb AS a2 ON a1.issue_id = a2.issue_id
WHERE
issue_type = 'Career'
)
https://www.nowcoder.com/share/jump/8193419321685109477515
错误点:一开始的思路是想统计issue_type='Education' AND issue_type='Career' 的用户数,但是数据表中的对应关系每个记录对应一个问题类型,未仔细查看数据表,思路有误
思路1:找到回答教育类问题(WHERE)的id(去重!),再子查询找到回答职场类问题的用户,只对出现在子查询中的用户名计数
代码:
SELECT
count(distinct author_id)
FROM
issue_tb AS a1
LEFT JOIN answer_tb AS a2 ON a1.issue_id = a2.issue_id
WHERE
issue_type = 'Education'
AND author_id in (
SELECT
author_id
from
issue_tb AS a1
LEFT JOIN answer_tb AS a2 ON a1.issue_id = a2.issue_id
WHERE
issue_type = 'Career'
)
全部评论
思路2:利用行转列,得到每个用户作答教育类和职业类问题的数量(子查询部分),对教育类和职业类作答数量都不为零的用户计数,两个方法都可以通过,对SQL底层不明确,思路2可能更耗费时间
SELECT
count(*) as num
FROM
(
SELECT DISTINCT
author_id,
sum(
CASE
WHEN issue_type = 'Education' THEN 1
ELSE 0
END
) AS Education,
sum(
CASE
WHEN issue_type = 'Career' THEN 1
ELSE 0
END
) AS Career
FROM
issue_tb AS a1
LEFT JOIN answer_tb AS a2 ON a1.issue_id = a2.issue_id
GROUP BY
author_id
) AS t1
WHERE
Education != 0
AND Career != 0
相关推荐
查看18道真题和解析 点赞 评论 收藏
分享
02-24 19:45
西南大学 后端工程师
程序员小白条:简历写的有点太多了,一般两页是实习经历比较多的情况下,要么自己有一些有影响力的开源项目,如果你走软件,硬件没必要实习,学校安排总是没区分度的,央国企最好有中大厂实习,另外学历比较重要,不是都要求硕士的,技术会比互联网要求低一些 点赞 评论 收藏
分享