牛客网数据库SQL实战详细剖析(71-75)

SQL71 牛客每个人最近的登录日期(六)

select distinct u.name, pn.date, sum(pn.number) over(partition by u.name order by pn.date) as ps_numfrom passing_number pnleft join user u on pn.user_id = u.idorder by pn.date, u.name

解题思路:sum():组内累加

SQL72 考试分数(一)

select job, round(sum(score) * 1.0 / count(score),3) as avg from grade group by job order by avg desc

select job, round(avg(score),3) as avg from grade group by job order by avg desc

解题思路:求平均值后四舍五入 round(avg(列名),要保留多少位数),按job分组,按avg(score)降序

SQL73 考试分数(二)

select id, a.job, score from grade g left join ( select job, avg(score) as avg from grade group by job ) a on a.job = g.job where g.score > a.avg

select id, job, score from ( select id, job, score, avg(score) over(partition by job) as avg from grade ) a where a.score > a.avg

解题思路:窗口函数avg() over (partition by) 增加一列各类的平均值

SQL74 考试分数(三)

select a.id, a.name, a.score from ( select g.id, l.name, g.score, dense_rank() over(partition by l.name order by g.score desc) as `rank` from grade g left join language l on g.language_id = l.id ) a where a.`rank` <=2

解题思路:主要是用了窗口函数 DENSE_RANK()

SQL75 考试分数(四)

select job, round(count(id) / 2), round((count(id) + 1) / 2) from grade group by job order by job

解题思路:总数/2 (总数+1)除以2

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容