【SQL每日一练】day10:牛客高频习题练习:函数+组合查询专题

题目一:计算总刷题数,并将所选列名改为总刷题数

题目要求:

牛客刷题详细数据表`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
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值