mysql要求是 求出计算机系java考试成绩最高 的学生的学号、姓名和Java考试成绩。

要求是
求出计算机系java考试成绩最高
的学生的学号、姓名和Java考试成绩。
select s.sno,s.sname,grade from student s
join sc on s.sno=sc.sno
join course c on c.cno=sc.cno where sdept='计算机系' and cname='java' order by grade DESC;
-- 为什么这里选最大值不能用top 我加了with ties 也不对是哪里语法错误了。
select max(grade) from sc order by grade desc;
-- 然后我想这是不是mysql top语法不能用,然后我就试试这个最后还是不行。但是用max就可以。这是为什么

mysql 不是使用top关键字来取数据 ,而是在最后加上 limit 1 那就是取第一条

select s.sno,s.sname,grade from student s
join sc on s.sno=sc.sno
join course c on c.cno=sc.cno where sdept='计算机系' and cname='java' order by grade DESC limit 1;

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/329461
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:MySQL导出数据 用Java读时一行记录的某些列出现换行导致读取到多行数据 问题分析与解决方法
  • 除此之外, 这篇博客: 用mysql和java写一个简易点名器中的  第三步:将数据放入集合中并用洗牌算法随机挑出幸运儿 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •          在第六步之前创建一个arraylist对象,并在while循环里将数据add()进去。

       //6.处理结果
                ArrayList<String> list = new ArrayList<>();
                while (rs.next()) {
                    String name = rs.getString("name");
                    String id = rs.getString("id");
                    list.add(name+id);
                }
    
                System.out.println("连接成功");


    洗牌算法介绍和使用

     System.out.println("连接成功");
                Collections.shuffle(list);
                System.out.println(list.get(0));

    运行结果就不放了

    总的代码:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Scanner;
    import java.util.ResourceBundle;
    
    /**
     * @author Pzr
     * @create 2022/9/19 - 16:41
     */
        public class JDBC {
            public static void main(String[] args) throws Exception {
                //1.导入jar包
                //2.注册驱动
                Class.forName("com.mysql.jdbc.Driver");
    
                //3.获取连接
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "333");
    
                //4.获取执行者对象 (statement:表现,声明,跟程序意思不匹配)
                Statement stat = conn.createStatement();
    
                //5.执行sql语句,并且接收结果
                String sql = "select * from test_1";
                ResultSet rs = stat.executeQuery(sql); //execute执行,query:查询,resultset:结果集
    
                //6.处理结果
                ArrayList<String> list = new ArrayList<>();
                while (rs.next()) {
                    String name = rs.getString("name");
                    String id = rs.getString("id");
                    list.add(name+id);
                }
    
                System.out.println("连接成功");
                Collections.shuffle(list);
                System.out.println(list.get(0));
                //7.释放资源
                conn.close();
                stat.close();
                conn.close();
            }
        }
    
    
    

    注意:在将数据导入的那步可能出现缺少驱动的情况:

    解决方法: https://www.zhihu.com/question/391063453/answer/2680013999

  • 以下回答由chatgpt基于相关博客总结生成:

    根据您的需求,您可以使用以下代码在MySQL中查询计算机系Java考试成绩最高的学生的学号、姓名和Java考试成绩:

    SELECT s.id, s.name, c.java_score 
    FROM students s 
    JOIN computer_exam c ON s.id = c.id 
    WHERE c.major = '计算机系' AND c.java_score = (SELECT MAX(java_score) FROM computer_exam WHERE major = '计算机系');
    

    其中,表students存储学生信息,包括学号id和姓名name等字段;表computer_exam存储计算机系学生的考试成绩信息,其中包括学号id、Java考试成绩java_score、专业major等字段。

    以上SQL查询语句通过JOIN将两个表按照学号id进行匹配,然后通过WHERE子句筛选出计算机系学生以及Java考试成绩最高的学生,最后SELECT语句输出对应的学号、姓名和Java成绩。

    关于您提到的MySQL的top语法,实际上MySQL没有类似于SQL Server的TOP语法。但是您可以使用LIMIT语法来限定查询结果集的大小,如LIMIT 1可只查询第一行记录。另外,您所提到的使用max函数来实现查询,可以看作是一种使用聚合函数来计算最大值的方法,在实际应用中也十分常见。

    希望以上解答能够帮到您,如有任何问题请随时与我联系。