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

写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

  

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

时间: 2024-10-05 00:05:56

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

群里有人问为什么在腾讯主机里看到有阿里云的链接, 难道是商业竞争吗?

好久之前的事了, 看了一下放在硬盘里, 得找个地方丢, 准备丢在博客上来. 群里有人问为什么在腾讯主机里看到有阿里云的链接, 难道是商业竞争吗? 我一看 aliyun.one ?立刻想到是钓鱼网站吗? 阿里云有这域名我怎么不知道? 然后使用 dns 查询工具, 查到所有响应的节点都在境外.我在国内 dns 怎么是境外? 已经确定是病毒了.使用浏览器打开这个网址, 发现立刻跳转到了 aliyun.com , 不知道的还以为是真的阿里云. 然后 curl 一下, 发现内容不一样了, 发现里面有 ht

在QQ群里有人提问有没有C语言的XML解析,偶然想到了这个问题:C++调用C库,简单试验:

我的电脑Mac,系统MaveRicks. 写一个C代码: #include<stdio.h> void hello(){ printf("Hello, this is from C Language ~\n"); } 编译一个库文件: franklinMacmini:~ git$ gcc --shared -o libhello.so hello.c franklinMacmini:~ git$ ll -tr drwx------+ 3 git staff 102 Sep

编程面试中排名前10的算法

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 Arrays.sort() // 数组排序 Arrays.toString(char[] a) // 数组转成字符串 charAt(int x) // 获得

【吐槽】IM群里几种我认为愚蠢的提问方式

一.“有人吗?” 你能得到一句[在,请说]的答复我就服了你,这样问的结果往往是等半天没一个人鸟你,悲观的你或者就此凄凉的退群了,感概人情冷暖的同时甚至开始怀疑人生:积极的你或者这才意识到~要不干脆说问题吧,呵呵. 这类型的其它变种有:“有高手吗?”“高手在吗”……哈~这问题得这么分析: 如果是常规码农(非高手,也不是响叮当的半吊子),一下就被你吓到了,万一吱声,而你的问题真的是高深难测,岂不神出场翔收尾,一不小心被你鄙夷一番就不值了. 如果是高手~(没当过高手,以下纯属YY)人家大多都在钻研自己

程序员面试中常见10大算法汇总

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. 1 2 3 4 5 6 toCharArray() // 获得字符串对应的char数组 Arrays.sort() // 数组排序 Arrays.toString(char[] a) // 数组转成字符串 charAt(

Vue 脱坑记 - 查漏补缺(汇总下群里高频询问的xxx及给出不靠谱的解决方案)

前言 发现群里有些问题的提问重复率太高了,每次都去回答,回答的贼烦.这里做一个大体的汇总,废话不多说,直接开始给出方案,不是手把手..若是连问题和解决都看不懂的..应该去补充下基础知识 问题汇总 Q:安装超时(install timeout) 方案有这么些: cnpm : 国内对npm的镜像版本 /* cnpm website: https://npm.taobao.org/ */ npm install -g cnpm --registry=https://registry.npm.taoba

如何让自己成为iOS面试中的佼佼者?

什么样的员工最受企业欢迎?有人一直在努力提升自己,成为受企业欢迎的员工,然而,我们应该往哪些方向去提升自己呢?100家知名企业今年来iOS面试题合集,你要的这里都有,企业要的这里也有,从基础开始到进阶.深入底层,整理出188个大纲,干货太足,每个题目都会有相对的答案,由于字数太多所以我整理出一个文档,文档获取地址,加入iOS开发交流群:714042473免费获取.大纲展示:1.swift和oc的区别2.编译链接3.synthesize & denamic4.在项目开发中常用的开发工具有哪些?5.

JAVA面试中需要准备的点

本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只有当反复确认能力不行才会下结论,相反,如果候选人给我的印象不错,我也会从多个角度来衡量,以免招进会说但不会干活的“大忽悠”. 其实倒也不是我故意要为难候选人,毕竟入职后就是同事,但面试官的职责使然,而且,如果资深的面试官一般也这样. 写到这里,恐怕会吓到一些想要面试的朋友,能力强和能力弱都会被多问,

面试中注意3个javascript的问题

JavaScript 是所有现代浏览器的官方语言.因此,各种语言的开发者面试中都会遇到 JavaScript 问题. 本文不讲最新的 JavaScript 库,通用开发实践,或任何新的 ES6 函数.而是讲讲面试中经常出现的 3 个 JavaScript 问题.我问过这些问题,我的朋友说他们也问. 当然不是说你在准备 JavaScript 面试时只要学习这 3 个问题 -- 你还有很多途径去更好的准备即将到来的面试 -- 但面试官很有可能通过下面 3 个问题来判断你了解和掌握 JavaScrip