sql刷题3
⽜客每次考试完,都会有⼀个成绩表(grade),如下:
第1⾏表⽰⽤户id为1的⽤户选择了C++岗位并且考了11001分
。。。
第8⾏表⽰⽤户id为8的⽤户选择了前端岗位并且考了9999分
请你写⼀个sql语句查询⽤户分数⼤于其所在⼯作(job)分数的平均分的所有grade的属性,并且以id的升序排序,如下
(注意: sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5,sqlite四舍五⼊的函数为round)
-- 窗⼝函数. 对job集每个⾏记录中进⾏均值计算
select id, job, score
from
(select id,job,score,
avg(score)over(partition by job)av
from`grade`
)t1
where score > av
python新手代码useridorder by1;
-- 头铁的⼈就是直接⼦查询怼上去
select
id,
job,
score
from`grade` t1
where score >
(select avg(score)from`grade` t2 where t1.job = t2.job)
order by
1;
-- 更头铁的⼈直接连表
select id, t1.job, score
from`grade` t1
left join
(select job,avg(score)av from`grade`group by1)t2
on t1.job = t2.job
where t1.score > t2.av
order by1;
如下有⼀张商品表(goods),字段依次为:商品id、商品名、商品质量
还有⼀张交易表(trans),字段依次为:交易id、商品id、这个商品购买个数
查购买个数超过20,质量⼩于50的商品,按照商品id升序排序,如:
思路:
trans表只需要提供每个商品的购买总数,所以嵌套查询,1先处理好trans表,命名为b(select⼦查询),2再结合goods表完成任务(外层select)
程序:
select id,name,weight,total
from goods as a,
(select goods_id,sum(count) total
from trans
group by goods_id) as b
where a.ds_id and weight<50 and total>20
有很多同学在⽜客购买课程来学习,购买会产⽣订单存到数据库⾥。
有⼀个订单信息表(order_info),简况如下
第1⾏表⽰user_id为557336的⽤户在2025-10-10的时候使⽤了client_id为1的客户端下了C++课程的订单,但是状态为没有购买成功。
第2⾏表⽰user_id为230173543的⽤户在2025-10-12的时候使⽤了client_id为2的客户端下了Python课程的订单,状态为购买成功。。。。
最后1⾏表⽰user_id为557336的⽤户在2025-10-25的时候使⽤了client_id为1的客户端下了Python课程的订单,状态为购买成功。请你写出⼀个sql语句查询在2025-10-15以后,如果有⼀个⽤户下单2个以及2个以上状态为购买成功的C++课程或Java课程或Python课程,那么输出这个⽤户的user_id,以及满⾜前⾯条件的第⼀次购买成功的C++课程或Java课程或Python课程的⽇期first_buy_date,以及购买成功的C++课程或Java课程或Python课程的次数cnt,并且输出结果按照user_id升序排序,以上例⼦查询结果如下:
解析:
id为4,6的订单满⾜以上条件,输出57,id为4的订单为第⼀次购买成功,输出first_buy_date为2025-10-23,总共成功购买了2次;
id为5,7,8的订单满⾜以上条件,输出557336,id为5的订单为第⼀次购买成功,输出first_buy_date为2025-10-23,总共成功购买了3次
实这个题⽬订单(⼆)和订单(三)筛选的东西,聚合之后是⼀样的,所以根据订单(⼆)的写法,加聚合更简单,
select user_id,min(date) first_buy_date,count(user_id) cnt
from order_info
where date>'2025-10-15'
and product_name in('C++','Java','Python')
and status='completed'
group by user_id
having count(user_id)>1
order by user_id
有⼀个员⼯表employees简况如下:
有⼀个部门表departments表简况如下:
有⼀个,部门员⼯关系表dept_emp简况如下:
请你查所有员⼯的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员⼯,以上例⼦输出如下:
本题思路为运⽤两次LEFT JOIN连接嵌套
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论