sql查询语句:top n的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询语句:top n的用法相关的知识,希望对你有一定的参考价值。

top是指按顺序选取前几个数据。order
by是属性默认升序排列(asc),如果想倒序+desc
select
*和select
all
select
1一样是选取所有(任意一个)
top
3前3个
select
查询表达式是+表中的元组中的候选码
select
no
from
no是table表中的一个码,就是唯一标示这一元组的名字,额
就是名字
不能直接用select+数字
只能用select
123
as
no
参考技术A 我不知道你的抽取人数一样不,如果要总共抽取n个人然后随机分配给每个班,则可以用下边的代码:
update
student
set
win
=
1
where
sid
in
(select
top
(select
sum(snum)
from
task)
sid
from
student
order
by
newid())
如果是每个班抽取同样的人数,或者每个班抽取不同的人数,则需要再连接个classid,然后分组计算出每个班级的sid即可,如果不会可以追问
参考技术B TOP
子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP
子句是非常有用的。
SQL
Server
的语法:
SELECT
TOP
number|percent
column_name(s)
FROM
table_name
mysql
语法
SELECT
column_name(s)
FROM
table_name
LIMIT
number
Oracle
语法
SELECT
column_name(s)
FROM
table_name
WHERE
ROWNUM
<=
number
参考技术C top
3
:根据你的排序,显示前三个记录
*:是显示所有的字段
你的错误,可能在①字段有没有②逗号应该是英文的逗号

分组后取每组内排名的Top N的SQL语句

给个MySQL例子参考 

-----查询每门课程的前2名成绩   

CREATE   TABLE   StudentGrade( 
stuId   CHAR(4),         --学号 
subId   INT,                 --课程号 
grade   INT,                 --成绩 
PRIMARY   KEY   (stuId,subId) 

GO 
--表中数据如下 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘001 ‘,1,97); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘001 ‘,2,50); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘001 ‘,3,70); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘002 ‘,1,92); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘002 ‘,2,80); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘002 ‘,3,30); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘003 ‘,1,93); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘003 ‘,2,95); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘003 ‘,3,85); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘004 ‘,1,73); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘004 ‘,2,78); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( ‘004 ‘,3,87); 
GO 
 
--查看数据 
select   *   from   StudentGrade 


--假如出现并列时,也只取两个同学的话。 
--方法一: 
select   distinct   * 
from   studentgrade   as   t1 
where   stuid   in 
(select   top   2   stuid 
  from   studentgrade   as   t2 
  where   t1.subid=t2.subid 
                  order   by   t2.grade   desc) 
order   by   subid,   grade   desc 

--方法二: 
select   *   from   StudentGrade   a   where   (select   count(1)   from   studentGrade   where   subId=a.subId   and   grade> =a.grade) <=2 

--方法三: 
select   *   from   StudentGrade   t 
where   (select   count(1)   from   StudentGrade   where   subid=t.subid   and   grade> t.grade) <=1 
order   by   subId,grade   desc 

--结果 
 

drop   table   StudentGrade

以上是关于sql查询语句:top n的用法的主要内容,如果未能解决你的问题,请参考以下文章

SQL中使用WITH 语句的查询

MYSQL 查询语句中in的用法

【SQL语句】-分页查询limit的用法

分组后取每组内排名的Top N的SQL语句

C# SQL条件查询语句where中使用变量的用法

SQL嵌套SELECT语句的用法-