SQL面试经典问题-开窗函数

yumo6667个月前 (03-30)技术文章43
  • 分组取每组最大值

  • 案例:按课程号分组取成绩最大值所在行的数据

    select 
        学号,
        课程号,
        max(成绩) as 最高分,   
    from a
    group by 课程号


  • 分组取每组最小值
  • 案例:按课程号分组取成绩最小值所在行的数据(意思是每个课程最小值的学生信息都要出来)

    关联子查询

    select * from score a
    where 成绩=(
    select min(成绩) from score b
    where b.课程号=a.课程号
    )


    查询各科成绩前两名的记录(topN),一定要嵌套一层,不能直接取,因为where比select先执行

    select *
    from (select 
                *,
                dense_rank() over (partition by ID  order by score desc) as 排名
           from
           score)t
    where t.排名<=2


    查找单科成绩高于该科目平均成绩的学生名单

    第一种解法

    select 姓名
    from 
        成绩表
        left join 
        (select 科目,
            avg(score) as 平均成绩
         from 成绩表
        group by 科目)t
    where 成绩表.成绩>t. 平均成绩

    第二种解法

    select * from (
    select *,
    avg(成绩) over (
    PARTITION by 课程号) as 平均成绩
    from score)as a
    where 成绩>平均成绩

    相关文章

    「春招系列」MySQL面试核心25问(附答案)

    篇幅所限本文只写了MySQL25题,像其他的Redis,SSM框架,算法,计网等技术栈的面试题后面会持续更新,个人整理的1000余道面试八股文会放在文末给大家白嫖,最近有面试需要刷题的同学可以直接翻到...

    大厂面试SQL题(一) ——连续登陆(字节)

    在日常工作进程中,分析师会经常剖析用户对于公司产品的粘性及留存状况,对应至数据指标层面,常见的有“连续 xx 天登陆用户数”、“7 天/30 天留存用户数”等。正因如此,这类题目在数据面试中属于较为常...

    SQL优化这十条,面试的时候你都答对了吗?

    尽量不要在要给在SQL语句的where子句中使用函数,这样会使索引失效。如果已经确定查询结果只有一条数据(当表中数据的该字段是唯一的),在查询SQL末尾增加 limit 1,这样MySQL的查询执行引...