sql实现分组排序-实例分别获取男女成绩前三名的学生姓名

表scores (name,sex,score),分别获取男女前三名学生姓名。

建立表格:

create table scores (
 name varchar2(8),sex varchar2(1),score number(3,0)
  )

插入学生成绩

insert into scores(name,sex,score) values (‘男A‘,‘1‘,100);
  insert into scores(name,sex,score) values (‘男B‘,‘1‘,90);
  insert into scores(name,sex,score) values (‘男C‘,‘1‘,80);
  insert into scores(name,sex,score) values (‘男D‘,‘1‘,70);
  insert into scores(name,sex,score) values (‘女A‘,‘2‘,100);
  insert into scores(name,sex,score) values (‘女B‘,‘2‘,90);
  insert into scores(name,sex,score) values (‘女C‘,‘2‘,80);
  insert into scores(name,sex,score) values (‘女D‘,‘2‘,70);

查询:

SELECT name, sex,score
   FROM (SELECT name,
                sex,
                score,
                ROW_NUMBER() OVER(PARTITION BY sex ORDER BY score DESC) RW
           FROM scores)
 WHERE RW < 4

运行结果:

1 男A 1 100
2 男B 1 90
3 男C 1 80
4 女A 2 100
5 女B 2 90
6 女C 2 80

时间: 2024-08-01 16:35:09

sql实现分组排序-实例分别获取男女成绩前三名的学生姓名的相关文章

MySQL中查询获取每个班级成绩前三名的学生信息

今天有同事说到了怎么MySQL中查询获取每个班级成绩前三名的学生信息,在网上查了查,然后写出代码,很快就OK了. CREATE TABLE t_testscore(    pk_id INT PRIMARY KEY,    c_name VARCHAR(50) ,    c_score INT,    c_class INT )DEFAULT CHARSET=utf8; INSERT INTO t_testscore VALUES (1, '张三6', 66, 1),(2, '张三5', 65,

sql语句分组/排序/计算总数/连接等sql语句书写

1.什么是表连接? 答:比如两张表,要获取的信息来自两张表,就需要通过外键的形式进行两张表的连接.最后产后组合信息. 表连接是通过join连接的.表连接说白了就是产生一个大表.表连接也都是用于查询上的,用户查询获得多种信息. 2.什么情况下用到分组? 答:涉及到每个“xxx字段”时,就是典型分组,要用group by xxx字段. 分组时,基本都要显示分组的字段,这样才能区分是哪个被分组的字段有什么数据. 比如从student表中查询每个院系有多少人 mysql> SELECT departme

Sql sever 分组排序

维护人事的时候人事局要求添加一个新功能,具体需求如下:添加的人员在同一个单位的按照顺序编号并且单位也要实现时间排序,也就是说有两个排序,第一单位名称排序,先创建的一直在前,然后按照创建时间依次排序,第二人员排序,每个单位的人按照一定的编码进行排序.这里听了师哥的建议采用的是给每个新加的单位独立编号,比如第一个创建的单位是1,然后依次是2.3.4···这样就能很好的排序啦.这里我针对要操作的表新建了一个触发器,以此来实现这个功能,具体代码与说明如下. --=====================

用一条sql语句查询出“每门”课程都大于80分的学生姓名

Name chengji fengshu张三 数学 75张三 语文 81李四 数学 90李四 语文 76王五 数学 81王五 语文 100王五 英语 90 SQL Server: select distinct [Name] from [表] where [Name] not in ( select [Name] from [表] where [fengshu]<=80) 或者 select distinct name from A minus select name from A where

用一条SQL语句 查询出每门课程都大于80分的学生姓名&quot; 的实现方式

建表: 1 create table Score( 2 name varchar(20), 3 course varchar(20), 4 score int) 5 6 go 7 8 insert Score 9 select 'HanMeimei','Chinese',81 union all 10 select 'HanMeimei','Mathematics',75 union all 11 select 'HanMeimei','History',81 union all 12 sele

不简单的SQL查询和排序语句

真不简单!! 一:使用select语句进行查询 语法: SELECT    <列名> FROM      <表名> [WHERE    <查询条件表达式>] [ORDER BY <排序的列名>[ASC或DESC]] eg1: SELECT               SCode,SName,SAddress FROM   Students WHERE               SSEX = 0 ORDER BY   SCode 二:查询所有列和行: eg:

SQL删除重复行和查询所有大于某成绩的语句分析

有这样一个题,用一条SQL语句 查询出每门课都大于80分的学生姓名. 下面是表 分析,查询每门课程都大于80的学生.SELECT DISTINCT name FROM dbo.student WHERE fenshu<=80查询出来的结果是李四王五张三都有. 小于等于80的语句SELECT name FROM dbo.student WHERE fenshu<=80 只有张三一个. 这个是重复的,值得利用,用not in(不在次语句中的)语句将两句拼写到一块如下: SELECT DISTINC

SQL数据分组后取最大值或者取前几个值(按照某一列排序)

今日做项目的时候,项目中遇到需要将数据分组后,分组中的最大值,想了想,不知道怎么做,于是网上查了查,终于找到了思路,经过比较这个查询时目前用时最快的,其实还有别的方法,但是我觉得我们只掌握最快的方法就行 ,好了,不说废话了! 直接上内容吧:以下数据是通过 SELECT [CustomerCaseNo],[PaymentsTime] FROM [BOMSDatabase].[dbo].[BAL_paymentsSwiftInfo] where StoresNo='zq00000034' group

sql实现对多个条件分组排序方法和区别

转自: http://blog.csdn.net/winer2008/article/details/4283539 rank,dense_rank,row_number区别 一:语法(用法):     rank() over([partition by col1] order by col2)      dense_rank() over([partition by col1] order by col2)      row_number() over([partition by col1]