各专业平均成绩较高的学生

如何解决各专业平均成绩较高的学生

表和数据:

CREATE TABLE major
( 
    id INT PRIMARY KEY,name VARCHAR(200)
);

insert into major values 
    (101,'Computing'),(102,'Arquitecture');

CREATE TABLE student
( 
    id INT PRIMARY KEY,name VARCHAR(200),major_id INT,foreign key(major_id) references major(id)
);

insert into student  values
    (1001,'Claude',101),(1002,'John',(1003,'Peter',102);

CREATE TABLE course
( 
    id INT PRIMARY KEY,name VARCHAR(200)
);

insert into course values 
    (901,'Databases'),(902,'Java'),(903,'Artificial Intelligence'),(904,'OOP');
    
CREATE TABLE grades
(
   student_id INT,course_id INT,grade integer,primary key (student_id,course_id),foreign key(student_id) references student(id),foreign key(course_id) references course(id)
);

insert into grades  values
    (1001,903,95),(1001,904,88),901,76),82),902,87);

预期:

| student    | major        | grade |
| ---------- | -------------| ----- |
| Peter      | Architecture | 87    |
| Claude     | Computing    | 91.5  |

换句话说:检索每个专业的高年级学生。

游乐场here

如果可能,没有TOP,LIMIT。

如果可能的话,请使用旧的ANSI SQL以及使用窗口函数。

使用MySQL引擎,但不是必需的。

我的方法#1

-- average grade by student
select s.name as Student,m.name as Major,avg(g.grade) as Average
         from student s
         inner join grades g on (s.id = g.student_id)
         inner join major m on (m.id = s.major_id)
         group by s.id

但不需要约翰:

| Student | Major        | Average |
| ------- | ------------ | ------- |
| Claude  | Computing    | 91.5000 |
| John    | Computing    | 79.0000 |
| Peter   | Arquitecture | 87.0000 |

我的方法#2

-- Max average grade by career; lacks student
select a.major,max (a.average) as Average
    from (select s.name as Student,avg(g.grade) as average
         from student s
         inner join grades g on (s.id = g.student_id)
         inner join major m on (m.id = s.major_id)
         group by s.id) a
    group by a.major;           

但缺少学生专栏。

| major        | Average |
| ------------ | ------- |
| Arquitecture | 87.0000 |
| Computing    | 91.5000 |

谢谢。

解决方法

如果您正在运行MySQL 8.0,则可以使用rank()进行此操作:

select *
from (
    select s.name as student,m.name as major,avg(g.grade) as average,rank() over(partition by m.id order by avg(g.grade) desc) rn
    from student s
    inner join grades g on s.id = g.student_id
    inner join major m on  m.id = s.major_id
    group by s.id,m.id
) t
where rn = 1

注意:

  • rank()允许联系

  • 联接条件周围的
  • 括号是多余的

,

您可以结合使用两个查询:

    [0,5]      (5,10]      (10,15]
a     0          1            0
b     0          0            0
c     1          2            2
d     0          1            0
,

对于旧版本的MySQL ...

SELECT x.* 
  FROM
     ( SELECT m.name major,s.name student,AVG(grade) avg_grade
         FROM major m
         JOIN student s
           ON s.major_id = m.id
         JOIN grades g
           ON g.student_id = s.id
        GROUP
           BY major,student
     ) x
  JOIN
     (
       SELECT major,MAX(avg_grade) avg_grade
         FROM 
            ( SELECT m.name major,AVG(grade) avg_grade
                FROM major m
                JOIN student s
                  ON s.major_id = m.id
                JOIN grades g
                  ON g.student_id = s.id
               GROUP
                  BY major,student
            )n
        GROUP
           BY major
      ) y
     ON y.major = x.major
    AND y.avg_grade = x.avg_grade

| major        | student | avg_grade |
| ------------ | ------- | --------- |
| Arquitecture | Peter   | 87.0000   |
| Computing    | Claude  | 91.5000   |

---

View on DB Fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-