首页 > 数据库 >面试合集1-sql篇

面试合集1-sql篇

时间:2024-11-13 17:00:48浏览次数:1  
标签:窗口 函数 RANK 面试 姓名 sql 排名 成绩 合集

 学生表s

 成绩表grade

1.查询所有学生的数学成绩,显示学生姓名name, 分数, 由高到低

2、统计每个学生的总成绩,显示字段:姓名,总成绩

 3、统计每个学生的总成绩(由于学生可能有重复名字),显示字段:学生id,姓名,总成绩

 4、列出各门课程成绩最好的学生, 要求显示字段: 学号,姓名,科目,成绩

5、列出各门课程成绩最好的2位学生, 要求显示字段: 学号,姓名, 科目,成绩

知识点: 每个科目内部进行排名

ROW_NUMBER() OVER (PARTITION BY kemu ORDER BY score DESC) AS num

 最终结果:

6、计算每个人的平均成绩, 要求显示字段: 学号,姓名,平均成绩

7、计算每个人的成绩,总分数,平均分,要求显示:学号,姓名,语文,数学,英语,总分,平均分

8、列出各门课程的平均成绩,要求显示字段:课程,平均成绩

9、列出数学成绩的排名, 要求显示字段:学号,姓名,成绩,排名

知识点:

DENSE_RANK() 在遇到相同值时会给予相同的排名,并且后续的排名会紧接着前一个排名,不会跳过任何数字。

RANK() 在处理具有相同排序值的行时会给予它们相同的排名,并且后续排名的数字会跳过,以保持排名的唯一性。

ROW_NUMBER() 不会对具有相同排序值的行分配相同的排名。相反,它会为每一行分配一个不同的数字,即使这些行的排序值相同。

10、列出数学成绩前3名的学生(要求显示字段:学号,姓名, 科目,成绩)

方法1:

方法2:

 11、列出数学成绩第2、3名的学生(要求显示字段:学号,姓名, 科目,成绩)

知识点:limit后面如果只写一个整数n,那就是查询前n条记录;如果后面带2个整数n 和 m,那么第一个数n就是查询出来队列的起点(从0开始),第二个m是统计的总数目

12、 列出数学成绩最后1名的学生(要求显示字段:学号,姓名, 科目,成绩)

 13、统计英语课程少于80分的,显示 学号id, 姓名,科目,分数

 14、统计每门课程不及格(x<60)、一般(60<x<80)、优秀(x>80)

附加知识点:

SQL窗口函数(Window Functions)是一类特殊的函数,它们允许你对数据集的一个“窗口”或子集执行计算,而不需要将数据分组到多个输出行中。这些函数对于执行如排名、累积和、移动平均等操作非常有用,它们可以在不需要改变原始数据行数的情况下,为每一行提供额外的计算值。

窗口函数通常与 OVER() 子句一起使用,该子句定义了窗口或数据集的分区以及排序规则。OVER() 子句可以包含以下部分:

  • PARTITION BY:将数据划分为多个分区,窗口函数将在每个分区内独立计算。如果没有指定 PARTITION BY,则整个结果集被视为一个单一的分区。
  • ORDER BY:指定窗口内行的排序顺序。这对于许多窗口函数(如 ROW_NUMBER()RANK()DENSE_RANK() 以及需要累积计算的函数)是必需的。

以下是一些常见的SQL窗口函数:

  1. 排名函数:
    • ROW_NUMBER():为窗口内的每一行分配一个唯一的连续整数。
    • RANK():为窗口内的每一行分配一个排名,如果两行具有相同的排序值,则它们将获得相同的排名,并且后续排名的数字会跳过。
    • DENSE_RANK():类似于 RANK(),但后续排名的数字不会跳过,即使存在重复的排名。
  2. 聚合函数作为窗口函数:
    • SUM()AVG()MIN()MAX() 等聚合函数可以作为窗口函数使用,它们允许你在窗口内计算累积和、移动平均等。
  3. 值函数:
    • FIRST_VALUE() 和 LAST_VALUE():分别返回窗口内排序后的第一行和最后一行的值。
    • LAG() 和 LEAD():分别返回窗口内当前行的前一行和后一行的值,这对于计算变化量或移动平均等非常有用。
  4. 其他函数:
    • NTILE(n):将窗口内的行划分为 n 个桶,并为每一行分配一个桶号。
    • CUME_DIST()PERCENT_RANK()NTILE() 等其他高级窗口函数,用于执行更复杂的计算。

使用窗口函数时,需要注意以下几点:

  • 窗口函数通常与 SELECT 语句一起使用,并且可以在 SELECT 列表、ORDER BY 子句或 HAVING 子句中出现(但在某些数据库中可能有限制)。
  • 窗口函数不能直接在 WHERE 子句中使用,因为它们在逻辑上是在结果集生成后才计算的。但是,你可以使用子查询或公用表表达式(CTE)来绕过这个限制。
  • 窗口函数的结果通常依赖于 OVER() 子句中定义的排序和分区规则,因此这些规则必须明确指定。

窗口函数是SQL中一个非常强大且灵活的特性,它们可以极大地简化复杂的数据分析任务。

 

标签:窗口,函数,RANK,面试,姓名,sql,排名,成绩,合集
From: https://www.cnblogs.com/yudx/p/18543366

相关文章

  • labview中连接sql server数据库查询语句
    当使用数据库查询功能时,我们需要用到数据库的查询语句,这里已调用sqlserver为例,我们需要按照时间来查询,这里在正常调用数据库查询语句时,我们需要在前面给他加一个限制条件这里用到了,数据库的查询语句。我们以时间为例,我需要查询从开始测试时间,到结束测试时间的数据,这里就用到......
  • Docker安装MySQL双主从复制
    一、下载mysql镜像略二、主节点my.cnf配置[mysqld]设置server_id,同一局域网中需要唯一server_id=1指定不需要同步的数据库名称binlog-ignore-db=mysql开启二进制日志功能log-bin=mysql-bin设置二进制日志使用内存大小(事务)binlog_cache_size=1M设置使用的二进制日志......
  • MySQL JDBC
    在Java开发中,与数据库进行交互是不可或缺的一部分。MySQL作为一种流行的关系型数据库管理系统,与Java的集成通常通过JDBC(JavaDatabaseConnectivity)来实现。JDBC提供了一套用于执行SQL语句的API,使得Java程序能够连接和操作数据库。本文将深入探讨MySQL与JDBC的集成过程,包括驱动......
  • MySQL 数据库
    在当今数字化浪潮中,数据库作为企业级应用的核心组件,其重要性不言而喻。从关系型数据库到非关系型数据库,再到分布式数据库,技术的演进不断推动着企业级数据库开发向更高效、更可靠、更可扩展的方向发展。本文将深入探讨数据库企业级开发的关键技术,结合代码示例,为您呈现一个全面的......
  • mysql基础知识2
    登录mysql数据库注:文中mysql版本为8.0而并非5.7使用命令行登录在操作系统中打开命令行工具/或使用xshell等ssh登录使用命令行登录数据库:根据所使用的数据库类型,输入相应的命令行登录命令。mysql-u[用户名]-p[密码]-P3306-h[数据库地址]-u用户名-p密码-P端口-h......
  • 实验四 PL/SQL编程
    一、实验目的及要求(1)掌握PL/SQL块结构、PL/SQL的基本语法、PL/SQL的控制结构。(2)掌握PL/SQL块中使用复合数据类型和游标的方法。(3)掌握PL/SQL异常处理技术。(4)掌握存储过程、存储函数、触发器高级数据库对象的基本作用。(5)掌握存储过程、存储函数、触发器的建......
  • 【GreatSQL 优化器 - 01】const_table
    【GreatSQL优化器-01】const_table一、const_table介绍GreatSQL的优化器主要用JOIN类来进行处理SQL语句的,JOIN类有以下四个table数量相关的成员变量。其中const_tables是optimize最开始就检查并且标识的,因为这样可以把记录最少的表放在执行计划的第一步,在后面的......
  • mysql基础知识(3)
    MySQL中有哪些重要的日志文件?错误日志:记录MySQL服务器运行过程中的错误信息。查询日志(GeneralLog):记录数据库执行的所有命令。慢查询日志:记录执行时间超过预设阈值的查询语句。redolog(重做日志):用于在系统崩溃时恢复未提交的数据。undolog(回滚日志):用于事务回滚时恢复数......
  • CentOS 安装 mysql 5.6
    一、下载官方的rpm包1wgethttp://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 二、安装rpm包1rpm-ivhmysql-community-release-el7-5.noarch.rpm 三、安装mysql1yum-yinstallmysql-server然后检查是否安装成功1rpm-qa|grepmysql......
  • 解决 SQLyog 连接 MySQL 8.0.24 报错 2058 的方法(Windows 平台)
    解决SQLyog连接MySQL8.4.2报错2058的方法(Windows平台)在使用SQLyog连接MySQL8.4.2时,你可能会遇到错误代码2058。这个错误通常是由于MySQL8.0默认使用的caching_sha2_password身份验证插件与SQLyog不兼容导致的。本文将详细介绍如何在Windows平台上解决这......