MySql查询语句中的变量使用
前言
今日在LeetCode刷MySql的题,遇到一题,题目到没什么,解答完了之后习惯去看此题的题解,有位大佬的思路让博主感觉很惊艳,至此,特地记录学习一下。
题目

解答
乍一看题目也没啥,分数排名,思路是首先获取每个分数对应的排名,使用变量实现排名顺序,生成一张临时表,最后用主表关联临时表按主表分数倒序得到每条分数的排名,可能大部分童鞋可能都是跟博主一样的思路,实现代码如下
SELECT
s.Score,
s1.`Rank`
FROM
Scores s,
(
SELECT
@rownum :=@rownum + 1 AS `Rank`,
t.Score
FROM
(SELECT @rownum := 0) r,
(
SELECT
Score
FROM
Scores
GROUP BY
Score
ORDER BY
Score DESC
) t
) s1
WHERE
s.Score = s1.Score
ORDER BY
s.Score DESC

结果也是正确的,于是提交完了之后去看看题解,学习下别人的思路,该大佬提供的题解如下,顿时就觉得妙啊,代码并不难,都能看得懂,但是却想不到,这条sql写出了for循环代码的感觉,这种思维真是值得学习

在这格式化一下大佬的sql
SELECT
Score,
Rank
FROM
(
SELECT
Score,
@curRank := IF (@prevRank = Score,@curRank + 0 ,@curRank :=@curRank + 1) AS Rank,
@prevRank := Score
FROM
Scores,
(
SELECT
@curRank := 0,
@prevRank := NULL
) r
ORDER BY
Score DESC
) s
后续
认真阅读完题解之后,博主继续刷题。。。又遇到一题,若是在以前,肯定一时半会想不出来,想出来了也会复杂的一批。可刚刚看完了题解之后,看到这题立马就有了新的思路,于是学以致用,概念一套,轻松解决~ 该题如下

解答sql
SELECT
DISTINCT tt.Num AS ConsecutiveNums
FROM
(
SELECT
t.*,
@times := IF ( @before_num = t.Num ,@times + 1, 1 ) AS times,
@before_num := t.Num
FROM
(SELECT @times := 1 ,@before_num := NULL) r,
LOGS t
) tt
WHERE
tt.times >= 3
总结
平时在工作中可能都用过MySql的变量来实现行号,但却未曾想到此变量还能如此使用,着实学习了不少。
MySql查询语句中的变量使用的更多相关文章
- mysql查询语句中用户变量的使用
先上代码吧 SELECT `notice`.`id` , `notice`.`fid` , `notice`.`has_read` , `notice`.`notice_time` , `notice ...
- mysql查询语句中自定义变量(转)
转:http://blog.sina.com.cn/s/blog_1512521570102wrfl.htmlselect cost,@a:=@a+1 from testone,(select @a: ...
- Mysql查询语句中字符型字段不区分大小写解决方法
项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...
- mysql查询语句中使用星号真的慢的要死?
前言 之所以写这篇文章,是源于以前看过的关于sql语句优化的帖子,里面明确提到了在sql语句中不要使用 * 来做查询,就像下面的规则中说的 2.尽量避免使用select *,返回无用的字段会降低查询效 ...
- mysql查询语句中like 的用法
1.常见用法: (1)搭配%使用 %代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据: (2)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一 ...
- MySql查询语句中解决“该列没有包含在聚合函数或者groupby子句中”的相关问题方法
首先引入语句来源,表结构和数据如下: 需求是:查出员工(personname)在不同店铺(store)的总薪酬(salary),相同店铺输出store,不同店铺输出multi_store. 正确查询语 ...
- MySQL 查询语句中自己定义的中文内容在Java Web 中显示为问号
Java Web 端做查询时,性别字段存的是数字,1代表男,2代表女,取数据时将性别转为汉字显示在页面,sql语句如下,结果发生了问题 select a.emp_id,a.emp_name ,cas ...
- mysql实例---sql语句中使用@变量
本文介绍下,在mysql语句中使用@变量的一个例子,学习下这个特殊变量的用法,有需要的朋友参考下吧. 要求: 计算用户距上次访问的天数,根据imei号区分不同的用户,如果时间段内只有一次访问则为0. ...
- mysql常用内置函数-查询语句中不能使用strtotime()函数!
来自:http://yushine.iteye.com/blog/775407 FROM_UNIXTIME把 unix时间戳转换为标准时间 unix_timestamp把标准时间转换为 unix时间戳 ...
随机推荐
- h5整体页面布局
只要在每个页面加入这段js他会把每个页面平均分成横向25rem,纵向47rem//页面布局 <script> (function(doc, win) { var docEl = doc.d ...
- css动画 loading
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Hive 高阶应用开发示例(一)
Hive的一些常用的高阶开发 内容 1.开窗函数 2.行转列,列转行,多行转一行,一行转多行 3.分组: 增强型group 4.排序 5.关联 本次的内容: 内容1 和内容2,采用 ...
- ASP.NET Uploadify 上传文件过大 报错(http error)借鉴,以防忘记
Uploadify上传文件原来很早之前用过,没发现什么问题.今天再使用过程中,当文件大于30M的时候就会报错404.查看错误消息提示配置最大上传太小了.需要修改. 记得原来配置上传文件大小在这里:&l ...
- WinForm使用Setuo Project打包安装包 (附带vs2019 InstallerProjects安装程序)
vs2019 InstallerProjects安装程序地址: 链接:https://pan.baidu.com/s/1K5iDuQT4CBBw2dJjRLqhjg提取码:dfhy 转载至https: ...
- Oracle Sqlplus 三项设置
显示sql执行时间:set timing on 显示sql execute plan:set autotrace trace exp 关闭 set autotrace off 设置行宽:set li ...
- [Failed]Tomcat cluster方案共享session配置出错,sigh....
后继发展:https://www.cnblogs.com/xiandedanteng/p/12134300.html 参考网文一:多个Tomcat之间实现Session共享 参考网文二:Tomcat官 ...
- Eclipse插件开发中File和IFile的转换
(1) File转IFile 第一种方法: IFile[] ifile = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationU ...
- 令人困惑的strtotime
经常会有人被strtotime结合-1 month, +1 month, next month的时候搞得很困惑, 然后就会觉得这个函数有点不那么靠谱, 动不动就出问题. 用的时候就会很慌… 这不, 刚 ...
- ⏰ Moment.js 宣布停止开发,现在该用什么?
本文整理自 Monent.js 官方英文公告 https://momentjs.com/docs/#/-project-status/ Moment.js 宣布停止开发,进入维护状态. 这是一个大而全 ...