首页 > 数据库 >sql中dql查询语句

sql中dql查询语句

时间:2023-09-09 17:33:55浏览次数:29  
标签:语句 分数 cid rank 序号 score sql dql select

最简单的就是 select *  from  表名  where <查询条件> group by <分组字段> having  <分组后筛选条件> order by 排序字段 limit 查询起始行号,查询数量。

今天新学了个 开窗函数/分析函数 

  1.常见的能够作为开窗函数的聚合函数(sum,avg,count,max,min)

  2.rank,dense_rank,row_number 等专用开窗函数。

直接写sql语句

create table sc
(
sid varchar(10) null comment '学生id',
cid varchar(10) null comment '课程id',
score decimal(18, 1) null comment '分数'
)
comment '分数表';   # 比如说前二名的分数都是100,第三名分数是99
-- rank():用于计算指定列的排名。生成的序号可能重复, 则排序就是 1 1 3...
select cid, score, rank() over (partition by cid order by score desc ) ‘序号’ from sc ;
-- row_number():用于给结果集中的每一行分配一个唯一的行号。生成的序号不重复,则排序就是 1 2 3 ...
select cid, score ,row_number( ) over(partition by cid order by score desc ) '序号' from sc;
-- dense_rank:在生成序号时是连续的。生成的序号可能重复但是不会断,则排序是 1 1 2 ...
select cid, score, dense_rank() over ( partition by cid order by score desc ) '序号' from sc;

-- 三者的应用,个人拙见,比如说要求分数最高的前3个分数则可以用 rank() ,毕竟最高的3个分数固定死了,查询前3名学生就可以直接用row_number 毕竟只需要3个学生就行了
-- 但是如果有10个人都是100分这前3名就不公平了,要找出分数前3的所有学生 这时候用 dense_rank ()   数据库所有数据:

-- 这个就很奇怪了,如果前2名分数一样则第三个人的序号就3,但是如果前2名分数一样,3,4名分数一样则前面4个人的序号分别为1 1 3 3 第5个人的序号就从5开始
select * from (select cid,score , rank() over (partition by cid order by score desc ) ‘序号’ from sc) t1 where ‘序号’ <=3;  

-- 找出每科分数前三的学生(3科 只能找出9个人)
select * from (select cid ,score ,row_number( ) over(partition by cid order by score desc ) '序号' from sc) t1 where 序号 <=3;

-- 下面是前三的分数的所有学生(比如说前三的分数为100,99,98 找出分数符合的所有学生)
select * from (select cid, score, dense_rank() over ( partition by cid order by score desc ) '序号' from sc) t1 where 序号<=3;


     

标签:语句,分数,cid,rank,序号,score,sql,dql,select
From: https://www.cnblogs.com/dz-154/p/17689653.html

相关文章

  • if语句
    语法结构1.#include<stdio.h>intmain() { if(i<o) //if(表达式)ptintf("你好"); //语句 return0;}2.#include<stdio.h>intmain(){ inta=11; if(a<10) //if(表达式)printf("你好"); //语句else //elsep......
  • 分支和循环语句1
    C语言是一门结构化的程序设计语句:1.顺序结构2.选择结构3.循环结构1.if(选择结构):#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){ intage=10; if(age<18) printf("未成年\n"); elseif(age>18&&age<28)//&&-逻辑与(并且),&am......
  • MySQL查询语句及练习题
    查询记录查询数据库表中列的数据SELECT*,列名FROM表名WHERE条件GROUPBY分组HAVING过滤ORDERBY排序LIMIT分页查询分组查询GROUPBY子句用于根据一个或多个列对结果进行分组--统计员工表中职位的分类信息SELECTJ职位FROM员工表GROUPBY职位;--统计员工表......
  • MySQL配置中文编码GBK的重要性
    一、背景   在mysql数据库中,默认使用的是latin字符集,所以无法正常的支持中文字符。在my.ini文件中将配置支持GBK编码,方便于后续数据库操作而不会报错误。二、问题如下图所示通过上述图,存在以下几个问题:默认创建的数据库和表是latin1编码。my.ini配置文件中设置为:character-s......
  • MySQL查询命令练习(二)
    详细的命令总结及用法点这里就好了^_^      ⬇⬇⬇《MySQL命令总结》看完命令用法看看下面的题吧根据题目要求,写出SQL语句namecoursescore张三语文85张三数学82李四语文85李四数学81李四英语88王五语文75王五数学85王五化学99创建表并验证CREATETABLEstudent(name......
  • MySQL 8使用部分撤销做权限限制
     在MySQL8.0.16之前,不可能授予全局权限的同时,排除某些schema;从MySQL8.0.16开始,如果启用了partial_revokes系统变量,就可以做到这一点。具体来说,对于拥有全局权限的用户,partial_revokes可以撤销特定schema的权限,同时保留其他schema的权限。这样施加的权限限制可能有助于......
  • 迁移:mysql迁移dm8问题处理
    问题1表[xxxxx]中不能同时包含聚集KEY和大字段处理方法sp_set_para_value(1,'PK_WITH_CLUSTER',0);将迁移工具退回输入DM用户名密码的页面再继续下一步,或者关闭当前迁移窗口重新打开迁移任务(PK_WITH_CLUSTER是会话级参数,直接重试会因为本会话的参数未生效而依然报错)问题2第......
  • SQL Server2019服务端启停
    服务器端是数据库,客户端是访问数据库的驱动。 背景:有时候只需要连接远程数据库操作即可,本地服务端可以暂不开启,减少内存的开销。 启动:1、任务管理器-服务-SQLServer(MSSQLSERVER)启动 开始后: 2、计算机管理-服务-SQLServer(MSSQLSERVER)启动 3、打开【开始】......
  • mysql时间段内查询
    mysql时间段内查询(第一种方法)SELECT*FROM 表名WHERE字段名>NOW()-INTERVAL2HOUR;(第二种方法)SELECT*FROM 表名WHERE 字段名>DATE_SUB(NOW(),INTERVAL60MINUTE);今天select*from表名whereto_days(时间字段名)=to_days(now());昨天SELECT* FROM 表名 ......
  • Mysql - WHERE子句
    今天想了解一下flowable是怎么样查询代办的,于是打断点结果发现有一个SQL语句有点意思SELECTDISTINCT RES.*FROM ACT_RU_TASKRESWHERE RES.ASSIGNEE_ISNULL ANDEXISTS( SELECT LINK.ID_ FROM ACT_RU_IDENTITYLINKLINK WHERE LINK.TYPE_='candidate'......