MySQL 局部变量

Transact-SQL 局部变量是可以保存特定类型的单个数据值的对象。在脚本或批处理中通常会使用变量

  • 作为计数器来计算循环执行的次数或控制循环执行的次数。
  • 保存流程控制中的测试值
  • 保存要由存储过程返回码或函数返回值返回的数据值。

SELECT @local_variable

1
2
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ ,...n ] [ ; ]

将右边的值赋给左边的变量。

操作员 行动
= 将后面的表达式分配给变量。
+= 添加和分配
-= 减法和赋值
*= 相乘并赋值
/= 划分和分配
%= 取模和赋值
&= 按位与并赋值
^= 按位异或并赋值
| = 按位或并赋值

SELECT @local_variable 通常用于将单个值返回到变量中。但是,当表达式是列名时,它可以返回多个值。如果 SELECT 语句返回多个值,则为变量分配最后一个返回的值。

如果 SELECT 语句没有返回任何行,则变量保留其当前值。如果表达式是不返回值的标量子查询,则变量设置为 NULL。

一个 SELECT 语句可以初始化多个局部变量。

  • 查询最近 12 个月的数据量, 没有的用 0 补全

因为把表中的所有月份 group by 之后,已有的月份不足 12 个月, 需要补齐,所以先生成一张 12 个月的空表

注意子查询中的日期不能使用 date_format 因为会失去时间格式,导致上面的变量在 addDate 中不可使用

1
2
3
select DATE_FORMAT( @u := ADDDATE(@u,INTERVAL 1 Month),'%Y-%m') as date from (
select @u := ADDDATE(now(),INTERVAL -6 Month) from Student s limit 12
) as t;

在拼接已存在的数据

1
2
3
4
5
6
7
8
select DATE_FORMAT( @u := ADDDATE(@u,INTERVAL 1 Month),'%Y-%m') as date from (
select @u := ADDDATE(now(),INTERVAL -6 Month) from Student s limit 12
) as t

left join (
select count(*) as sum,DATE_FORMAT(s.date,'%Y-%m') as date from Student s
group by DATE_FORMAT(s.date,'%Y-%m')
) as t2 on t2.date = t.date

最后把空值处理为 0

1
2
3
4
5
6
7
8
9
10
select date, if(ISNULL(d.sum),0,d.sum) as sum from (
select DATE_FORMAT( @u := ADDDATE(@u,INTERVAL 1 Month),'%Y-%m') as date from (
select @u := ADDDATE(now(),INTERVAL -6 Month) from Student s limit 12
) as t

left join (
select count(*) as sum,DATE_FORMAT(s.date,'%Y-%m') as date from Student s
group by DATE_FORMAT(s.date,'%Y-%m')
) as t2 on t2.date = t.date
) as d
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2025 SunZhiqi

此时无声胜有声!

支付宝
微信