题目一:计算总刷题数,并将所选列名改为总刷题数
题目要求:
牛客刷题详细数据表`questions_pass_record_detail`如下,请你计算总刷题数,并将所选列名改为'总刷题数'
表结构:
运行结果示例:
思路:
使用sum()函数进行总数的计算。
运行代码示例:
select sum(pass_count) as '总刷题数'
from questions_pass_record_detail
题目二:计算刷题总人数
题目要求:
牛客刷题详细数据表`questions_pass_record_detail`如下,数据记录了不同客户端、不同语言的用户刷题数据,请你整合计算刷题总人数并将结果命名为`cnt`
表结构:
运行结果示例:
思路:
本题考察了count()函数的使用,需要注意存在重复的用户id刷题记录,需要进行去重操作。
运行代码示例:
select count(distinct user_id) cnt
from questions_pass_record_detail
题目三:找出sql类题目的单次最大刷题数
题目要求:
牛客刷题详细数据表`questions_pass_record_detail`
如下,请你找出sql类题目的单次最大刷题数,将单次最大刷题数命名为`maxCnt`
表结构:
运行结果示例:
思路:
题目要求找到sql类题目单词最大的刷题次数,我们直接使用max()函数,并将查询范围限定到sql类型题目中即可。(题目中要求更改列名,但实际最后给出的答案的没有更改列名的。)
运行代码示例:
select max(pass_count) as maxCnt
from questions_pass_record_detail
where question_type = 'sql'
题目四:计算单次平均刷题数
题目要求:
牛客刷题详细数据表`questions_pass_record_detail`如下,请你计算单次平均刷题数并且命名为`avgCnt`(一条记录数据表示一次刷题)
表结构:
运行结果示例:
思路:
题目表述不是很容易理解,翻译一下大概就是每条记录代表刷了一次题,我们要求的是通过次数/刷题次数,也就是sum(pass_count) / count(*),由于分母为count(*),因此我们可以直接用avg()函数实现(这也是题目想要考察的点)。
运行代码示例:
select avg(pass_count) as avgCnt from questions_pass_record_detail
题目五:查询职位城市在北京或者职位工资高于100000的job_id和company_id,结果不去重
题目要求:
现有牛客职位信息表 ,请查询职位城市在北京的job_id和company_id,与职位工资高于100000的job_id和company_id,二者合并输出不去重,查询返回结果名称和顺序为job_id|company_id
表结构:
运行结果示例:
思路:
查询两组数据,使用union关键字合并查询结果。需要注意的是union会默认合并重复结果,但题目要求二者合并输出不去重,因此需要使用union all。
运行代码示例:
select job_id,company_id
from job_info
where job_city like '北京%'
union all
select job_id,company_id
from job_info
where salary > 100000
题目六:查询职位发布时间在2021年后或职位城市为上海的job_id, boss_id, company_id
题目要求:
现有牛客职位信息表 ,请查询职位发布时间在2021年后的job_id, boss_id, company_id,与职位城市为上海的job_id, boss_id, company_id,二者结果合并去重,按照job_city升序排序,查询返回结果名称和顺序为
job_id|boss_id|company_id
表结构:
运行结果示例:
思路:
日常吐槽,这题就离谱....非让使用合并查询,还需要用一个不在查询结果中的列进行结果排序,也就是两个查询合并后再套一层....但其实直接采用where查询更简单。
select job_id, boss_id, company_id from job_info where post_time >='2021-01-01' or job_city='上海' order by job_city
运行代码示例:
select
job_id,
boss_id,
company_id
from
(
select
job_id,
boss_id,
company_id,
job_city
from
job_info
where
year (post_time) >= '2021'
union
select
job_id,
boss_id,
company_id,
job_city
from
job_info
where
job_city = '上海'
order by
job_city
) a