当前位置:首页 » 编程语言 » sql排名次不开窗
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql排名次不开窗

发布时间: 2022-04-28 17:08:35

㈠ 在access中怎么写sql查询语句,select查询出一个有不同班级同学成绩(很多班级)的表中,

由于SQL语言处理问题的方式是面向记录"集合"的。解决排名这类问题对于SQL来说确实头疼,分组排名就更不用说了! 为了解决排名问题大型数据库系统为用户提供了RANK、ROWNUMBER等函数,但是ACCESS不支持排名、开窗等这类函数,一般建议用编程方式解决,例如VBA等。


这个问题确实不好回答。看到楼主就同一问题已经提问几次了,今天尝试用SQL解决如下,供参考


首先假设数据结构如下:

students(sid,name,class)

从上述代码来看实现这样的效果已经很麻烦,至于学生班名次,ACCESS只能借助编程手段了。

㈡ SQL语句排序的问题

你的写法是错误的,按照你的写法在对n进行降序排序时,第一个m升序排序结果会失效,等于最终只读n做了降序排序,而且你的语句本身也比较冗余。

正确的写法是:

SELECT * FROM a ORDER BY m ASC ,n DESC;

我们可以通过一些实例来具体分析order by 子句的用法:

假设有Orders 表:

注意:在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。

㈢ sql 各科的成绩排序怎么排名次

各科成绩的表达有两种:

科目 成绩排名 科目成绩排名

  1. 数学 90 1 数学 90 1

  2. 语文 90 1 语文 90 1

  3. 政治 85 3 政治 85 2

#这是第一种的显示
seclet科目,成绩,(
selectcount(成绩)+1
fromtable_namewhere成绩>t.成绩)
fromtable_nameast
orderby成绩desc
#第二中的显示类似可以是加distinct或者是不加distinct而用分组groupby一个意思
seclet科目,成绩,(
selectcount(distinct成绩)
fromtable_namewhere成绩>=t.成绩)
fromtable_nameast
orderby成绩desc

㈣ sql中查询排名名次

sql语句是这样的

select count(*) from student where class=601 and score>(select score from student where name='张三')
这个就求出了在601班的张三前有多少个人,他的名就是这个返回值+1,这个问题不关排序鸟事。做个统计就行了!

你不会是要在页面直接调用sql语句吧!
常规方法是把这个放在一个业务类传给数据访问层做处理后返回结果传给页面
你问的response.write这个有点吃力吧!

㈤ 怎么写一个sql语句来显示排名

在Sqlserver2005+中:

利用:Row_Number() over(order by chengji) 可以显示排名


--sql如句如下:
select*,row_number()over(orderbychengji)paimingfromStu


如有问题可以追问,我当及时回答。

希望能帮到你!

㈥ SQL排名语句,高手来赐教!

第一个回答的不错,不过有些错误,应该在插入临时表时,按成绩的倒序插入,
查询时按排名正序排列,同时,最后还要删除临时表
---按成绩的倒序插入临时表,
select id ,name,cj, identity(int,1,1) as pm
into #lsb
from 表名 order by cj desc
--按排名的正序排列
select * from #lsb order by pm
--删除临时表
drop table #lsb

㈦ sql 语句查询 前5名后5名的成绩

不知道你的是什么数据库,我用oracle的写法了。

两种办法:

  1. 分别求最大和最小,然后union all

    select * from(select* from table order by 成绩) where rownum<=5

    union all

    select * from(select* from table order by 成绩 desc) where rownum<=5

  2. 利用排序,找到每个人的位置,然后输出。排序的方法很多,可以用rownum排序,也可以用row_number()over()排序

    我用row_number()over()写一个

    selecta.姓名,a.成绩 from

    (select row_number()over(order by 成绩) num,姓名,成绩 from table) a where a.num<=5 or

    a.num>=(select count(*)-5 from table)

    我没实验,不过就算有问题也应该不大。

sqlserver的版本是啥?是2005以上么?如果是

那么利用那个row_number的应该也可以,不过为了让分数一样的人都出来,那么最好改为

这种情况是假设前五出现分数相同的话,假如前五名有六个人的情况,不过我没有输出名次,另外我上面的那种写法也可以试试,sqlserver好像也可以。

不过如果你要是sql2005以前的版本那时sqlserver还没有这几个开窗函数,那就稍微有点麻烦了。

select姓名,成绩 from

select rank()over(order by 成绩) num,rank()over(order by 成绩 desc) num_desc,姓名,成绩 from table) a where a.num<=5 or a.num_desc<=5 order by 成绩 desc

㈧ sql 排名次

你整理一个demo出来,把你的三张原始数据贴在excle中,然后再把你想要的结果贴在里面,然后这四张图,截图上传上来大家就知道你想要的了。