码迷,mamicode.com
首页 > 数据库 > 详细

最近群里有人说面试中会遇到mysql这样的坑

时间:2019-02-22 23:12:56      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:class   var   返回结果   prim   生成   weight   desc   har   遇到   

 写sql语句: 列出一个年级中每个班级前三名学生。

很多的人写的是: group by 班级名称 order by 分数 desc limit 3; 然后掉坑了。

其实就是一个: row_number() 函数可以解决。

但是mysql中没有这个函数。

以下给出一个示例:

 1 -- 生成数据
 2 DROP TABLE t1;
 3 CREATE TABLE t1 (
 4 id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
 5 grade TINYINT,
 6 `name` VARCHAR(20),
 7 val INT);
 8 
 9 INSERT INTO t1(grade,`name`,val)
10 VALUES
11 (1,x1,91),
12 (1,x2,44),
13 (1,x3,78),
14 (1,x4,90),
15 (1,x5,32),
16 (1,x6,1),
17 
18 (2,y1,10),
19 (2,y2,55),
20 (2,y3,11),
21 (2,y4,99),
22 (2,y5,79),
23 (2,y6,100),
24 
25 (3,z1,100),
26 (3,z2,20),
27 (3,z3,10),
28 (3,z4,60),
29 (3,z5,55),
30 (3,z6,90);
31 
32 -- 获取结果
33 SELECT grade,`name`,val
34 FROM (
35 SELECT t.*,IF(@var=grade, @rank:=@rank+1, @rank:=1) AS rank, @var:=grade 
36 FROM t1 t,(SELECT @rank:=0,@var:=0) v
37 ORDER BY t.`grade`,t.`val` DESC
38 ) a
39 WHERE rank<4;

返回结果:

 grade  name       val  
------  ------  --------
     1  x1            91
     1  x4            90
     1  x3            78
     2  y6           100
     2  y4            99
     2  y5            79
     3  z1           100
     3  z6            90
     3  z4            60

  

 

最近群里有人说面试中会遇到mysql这样的坑

标签:class   var   返回结果   prim   生成   weight   desc   har   遇到   

原文地址:https://www.cnblogs.com/zzzwalkingman/p/10420799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!