网站建设资讯

NEWS

网站建设资讯

mysql排名函数怎么用 mysql 排名

MySQL中row_number() over排序函数功能实现

示例:想要取出每个课程前3名的学生信息、课程id,成绩与对应课程内排名

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于网站建设、做网站、阿克陶网络推广、小程序开发、阿克陶网络营销、阿克陶企业策划、阿克陶品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供阿克陶建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

创建student表:

s_id为学生id,s_name为学生姓名,s_sex为性别

创建score表:

s_id 为学生id,c_id为课程id,s_score为对应的成绩

注意:@current_id=c_id,当c_id不是当前的课程时,rank重新从1开始计数,否则在当前rank上加1,@current_id赋值次序不能错,第一个正好未赋值,case when @current_idc_id 成立then 1执行

此时的排序需要现基于课程id,再基于成绩逆序

错误示范:

注意:在最后的条件设定中需要用having不能用where,因为在原表中是不存在rank字段的,这是我们为了取数所构造的

参考学习:

感谢作者分享!

————————————————————————————————————————

方法2:

此方法在实际应用于抽取成绩前3名时,如果有成绩并列的情况不会将某些学生落下

具体哪一种方法可视应用场景而定

用mysql根据积分和时间计算排名

select id,integral,addtime from cos_member_vip order by integral desc,addtime asc

--如果需要生成以积分为最高优先,其次以时间为从高到低为条件生成个排名字段,可用

--ROW_NUMBER() OVER ()函数

mysql rank函数怎么用

转:

Mysql

的rank

函数如何实现

表特征:

mysql

select

*

from

test;

+------+------+

|

a

|

b

|

+------+------+

|

1

|

20

|

|

1

|

21

|

|

1

|

24

|

|

2

|

20

|

|

2

|

32

|

|

2

|

14

|

+------+------+

6

rows

in

set

(0.00

sec)

现在,我们以a分组,查询b列最大的2个值。

这条sql要怎么写了?

1.创建表

Create

Table:

CREATE

TABLE

`sam`

(

`a`

int(11)

DEFAULT

NULL,

`b`

int(11)

DEFAULT

NULL

)

ENGINE=MyISAM

DEFAULT

CHARSET=utf8

2.插入模拟数据

INSERT

INTO

`sam`

VALUES

(1,10),(1,15),(1,20),(1,25),(2,20),(2,22),(2,33),(2,45);

+------+------+

|

a

|

b

|

+------+------+

|

1

|

10

|

|

1

|

15

|

|

1

|

20

|

|

1

|

25

|

|

2

|

20

|

|

2

|

22

|

|

2

|

33

|

|

2

|

45

|

+------+------+

3.SQL实现

select

a,b,rownum,rank

from

(select

ff.a,ff.b,@rownum:=@rownum+1

rownum,if(@pa=ff.a,@rank:=@rank+1,@rank:=1)

as

rank,@pa:=ff.a

FROM

(select

a,b

from

sam

group

by

a,b

order

by

a

asc,b

desc)

ff,(select

@rank:=0,@rownum:=0,@pa=null)

tt)

result

having

rank

=2;

4.结果:

+------+------+--------+------+

|

a

|

b

|

rownum

|

rank

|

+------+------+--------+------+

|

1

|

25

|

1

|

1

|

|

1

|

20

|

2

|

2

|

|

2

|

45

|

5

|

1

|

|

2

|

33

|

6

|

2

|

+------+------+--------+------+

4

rows

in

set

(0.00

sec)

mysql rank函数怎么用

转:

Mysql 的rank 函数如何实现

表特征:

mysql select * from test;

+------+------+

| a | b |

+------+------+

| 1 | 20 |

| 1 | 21 |

| 1 | 24 |

| 2 | 20 |

| 2 | 32 |

| 2 | 14 |

+------+------+

6 rows in set (0.00 sec)

现在,我们以a分组,查询b列最大的2个值。 这条sql要怎么写了?

1.创建表

Create Table: CREATE TABLE `sam` (

`a` int(11) DEFAULT NULL,

`b` int(11) DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8

2.插入模拟数据

INSERT INTO `sam` VALUES (1,10),(1,15),(1,20),(1,25),(2,20),(2,22),(2,33),(2,45);

+------+------+

| a | b |

+------+------+

| 1 | 10 |

| 1 | 15 |

| 1 | 20 |

| 1 | 25 |

| 2 | 20 |

| 2 | 22 |

| 2 | 33 |

| 2 | 45 |

+------+------+

3.SQL实现

select a,b,rownum,rank from

(select ff.a,ff.b,@rownum:=@rownum+1 rownum,if(@pa=ff.a,@rank:=@rank+1,@rank:=1) as rank,@pa:=ff.a

FROM

(select a,b from sam group by a,b order by a asc,b desc) ff,(select @rank:=0,@rownum:=0,@pa=null) tt) result

having rank =2;

4.结果:

+------+------+--------+------+

| a | b | rownum | rank |

+------+------+--------+------+

| 1 | 25 | 1 | 1 |

| 1 | 20 | 2 | 2 |

| 2 | 45 | 5 | 1 |

| 2 | 33 | 6 | 2 |

+------+------+--------+------+

4 rows in set (0.00 sec)


分享名称:mysql排名函数怎么用 mysql 排名
本文URL:http://cdweb.net/article/doeposp.html