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时间戳 ...
随机推荐
- 【Android】AndroidStudio关于EventBus报错解决方法its super classes have no public methods with the @Subscribe
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先说明,以前我用eventBus的 ...
- 持续部署入门:基于 Kubernetes 实现滚动发布
前言 软件世界比以往任何时候都更快.为了保持竞争力,需要尽快推出新的软件版本,而不会中断活跃用户访问,影响用户体验.越来越多企业已将其应用迁移到 Kubernetes. 在 Kubernetes 中有 ...
- mybatis-spring-boot-starter 1.3.0 操作实体类的SpringBoot例子
例程下载:https://files.cnblogs.com/files/xiandedanteng/gatling20200428-02.zip 需求:使用mybatis实现对hy_emp表的CRU ...
- 20190923-08Linux压缩和解压类 000 016
gzip/gunzip 压缩 1.基本语法 gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件) gunzip 文件.gz (功能描述:解压缩文件命令) 2.经验技巧 (1)只能压缩文 ...
- 看图学习 ArrayBuffers 和 SharedArrayBuffers
原文地址:A cartoon intro to ArrayBuffers and SharedArrayBuffers 原文作者:Lin Clark 译者:黑黑 校对者:Bob 在上一篇文章中,老司机 ...
- pytest测试框架 -- setup和teardown等
一.用例运行级别 1.函数级别(setup.teardown 或 setup_function.teardown_function): 仅对处于同作用域的测试函数有效(该函数定义不在类中,则对非类中测 ...
- appium的基本环境配置
1.先安装jdk1.7或jdk1.8之后,并配置好环境变量 2.安装Android SDK(安卓软件开发包),测试Android手机必然要安装Android SDK,例如android-sdk_r24 ...
- python中的锁lock=threading.Lock()
避免多个线程保卫同一块数据的时候,产生错误,所以加锁来防止这种问题 个人理解:当打印结果是交替打印时,但是如果需求是需要打印完一个线程的内容后,再去打印另一个线程的内容,就需要用到锁 不加锁打印结果: ...
- [LeetCode]198. 打家劫舍(DP)
题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个 ...
- 在思科三层交换机上配置DHCP,不同网段/VLAN间互通
摘要: 描述:在三层交换机上配置DHCP,实现DHCP为PC1/PC3分配192.168.1.X网段:实现DHCP为PC2/PC4分配192.168.2.X网段:并且各个PC间要可以互相通信.(文末附 ...