MySQL sql语句中变量应用

在这里插入图片描述

用户变量:以“@”开始,形式为“@变量名”。用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效。

全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set @@global.变量名,对所有客户端生效。只有具有super权限才可以设置全局变量。

会话变量:只对连接的客户端有效。

局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量。declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过变量简单实现一下:

SELECT 
  @rank := IF(@bid = tv.ZId, @rank := @rank + 1, @rank := 1) AS RANK,
  @bid := tv.ZId AS ZID, 
  tv.ZTime
FROM (SELECT * FROM tb_chestnut  ORDER BY ZId,  ZTime) tv, 
 (SELECT  @rank := 0,  @bid := NULL) z; 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过变量简单实现一下:

SELECT
  tv.ZSort,
  @bid := tv.ZId,
  @stime := IF(@bid = tv.ZId AND tv.ZSort = 1, tv.ZTime, IF(@etime IS NULL, tv.ZTime, @etime)) AS stime,
  @etime := DATE_ADD(@stime, INTERVAL tv.ZNum HOUR) AS etime, 
  tv.ZNum
FROM (SELECT * FROM tb_chestnut  ORDER BY ZId, ZSort) tv, 
 (SELECT  @stime := NULL,   @etime := NULL,     @bid := NULL) z;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:针对于分组排名问题mysql8.0版本可以使用row_number()over(partition by desc)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页