MySQL中符号@的作用

MySQL中符号@的作用,第1张

MySQL中符号@的作用 目录
  • mysql的@用法
  • 实战

select @a;

变量名,如果你不加的话,会认为这是一个列名,但是这列不存在,就报错了;

  • @变量名 : 定义一个用户变量.
  • = 对该用户变量进行赋值.

用户变量赋值有两种方式: 一种是直接用"=“号,另一种是用”:=“号。

其区别在于:

  • 使用set命令对用户变量进行赋值时,两种方式都可以使用;
  • 用select语句时,只能用”:=“方式,因为select语句中,”="号被看作是比较操作符。

(@i:=@i+1)

可以在生成查询结果表的时候生成一组递增的序列号

select (@i:=@i+5) as rownum, surname, personal_name from student, (select @i:=100) as init;

select @ids := 101,@l := 0

GROUP_CONCAT + group by

按照分组,连接字段上的数据,默认以,,也可以指定分割符

mysql的@用法

1,增加临时表,实现变量的自增

SELECT (@i:=@i+1),t.* FROM table_name t,(SELECT @i:=0) AS j

(@i:=@i+1)代表定义一个变量,每次叠加1;
(SELECT @i:=0) AS j 代表建立一个临时表,j是随便取的表名,但别名一定要的。

2,实现排序递增

SELECT
	( @i := @i + 1 ),
	p.* 
FROM
	( SELECT * FROM sys_region ORDER BY create_time DESC ) p, ( SELECT @i := 0 ) k

3,实现分组递增

SELECT
	@r := CASE WHEN @type = a.LEVEL THEN 
			@r + 1 
		ELSE 
			1 
		END AS rowNum,
	@type := a.`level` AS type,
	a.id 
FROM
	sys_region a,( SELECT @r := 0, @type := '' ) b;

这里用了临时变量@type,因为对临时变量操作的时候,被使用的变量都是临时变量。

实战
INSERT INTO t_top ( col_account, col_date, p_account, p_name )

SELECT b.col_account, b.col_date, b.p_account, b.p_name FROM
(
	SELECT
		@num := CASE WHEN @account = a.col_account THEN 
				@num + 1 
			ELSE 
				1 
			END AS rownum,
		@account := a.col_account AS account,
		a.* 
	FROM
		( SELECT * FROM zb_top  ORDER BY col_account, p_avg DESC ) a,
	( SELECT @num := 0, @account := '' ) j
) b where 6 > b.rownum

计算用户距上次访问的天数,根据imei号区分不同的用户,如果时间段内只有一次访问则为0。

初始化数据:
代码示例:

CREATE TABLE `pd` (
	`imei` varchar(32) NOT NULL DEFAULT '',
	`date` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `pd` VALUES ('1', '2013-07-25 00:00:01');
INSERT INTO `pd` VALUES ('1', '2013-07-26 00:00:02');
INSERT INTO `pd` VALUES ('2', '2013-07-23 00:00:04');
INSERT INTO `pd` VALUES ('2', '2013-07-26 00:00:03');
INSERT INTO `pd` VALUES ('3', '2013-07-26 00:00:01');

脚本,使用@特殊变量:
代码示例:

SELECT * FROM
(
	SELECT
		imei user_id,
		max(max_dd),
		max(max_dd_2),
		to_days(max(max_dd)) - to_days(max(max_dd_2)) days 
	FROM
		(
			SELECT
				imei,
				max_dd,
				max_dd_2 
			FROM
				(
					SELECT
						tmp.imei,
						tmp.date,
						IF(@imei = tmp.imei, @rank := @rank + 1, @rank := 1) AS ranks,
						IF(@rank = 1, @max_d := tmp.date, @max_d := NULL) AS max_dd,
						IF(@rank = 2, @max_d_2 := tmp.date, @max_d_2 := NULL) AS max_dd_2,
						@imei := tmp.imei 
					FROM
						(SELECT imei, date FROM pd ORDER BY imei ASC, date DESC) tmp,
						(SELECT @rownum := 0, @imei := NULL, @rank := 0, @max_d := NULL, @max_d_2 := NULL) a 
				) result 
		) t 
	GROUP BY
		imei 
	HAVING
		count(*) > 1 
) x WHERE x.days >= 1 AND EXISTS (SELECT 'x' FROM pd WHERE date > '2013-07-26 00:00:00')

注意:
表数据量较大时,使用union all等操作将会有悲剧性的结果。

到此这篇关于MySQL中符号@的作用的文章就介绍到这了,更多相关MySQL 符号@内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://outofmemory.cn/sjk/2996673.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-09-26
下一篇2022-09-26

随机推荐

  • 重的英语怎么说

    heavy:沉重的;繁重的;拥挤的;阴沉的;重物;严肃角色;大量地;笨重地;massy:巨大的,厚重的;(人名);hefty:重的;肌肉发达的;异常大的;强有力地;非常;体格健壮的人;weighty:

    2022-12-08
    000
  • 三人不抱树的意思是什么

    三人不抱树的意思是:指三个人一起抬一棵大树或其它重的东西的时候,不可能每个人都会自觉地齐心协力,总有人会偷懒,出工不出力,给另外的人增加负担和危险。古语说:一人不进庙,二人不看井,三人不抱树。告诉我们

    2022-12-08
    000
  • 吾常为寒心是以不愿子孙效也翻译

    吾常为寒心是以不愿子孙效也翻译

    2022-12-08
    000
  • 一个萝卜一个坑意思

    一个萝卜一个坑的意思是:比喻一个人有一个位置,没有多余。也形容做事踏实。出处《说说唱唱》1950年第2期,从此不再空劳动,一个萝卜一个坑。管叫那,劳动用在生产上,财源茂盛,五谷丰登,人民乐太平。1、拼

    2022-12-08
    000
  • 凌晨四点钟,我看见海棠花未眠是什么意思

    凌晨四点钟,我看见海棠花未眠是什么意思

    2022-12-08
    000
  • 筑书巢文言文翻译及答案

    筑书巢文言文翻译及答案是:我屋子里,有的书堆在木箱上,有的书陈列在前面,有的书放在床上,抬头低头看着,四周环顾下来,没有不是书的。我饮食起居,生病呻吟,感到悲伤,忧愁,愤怒,感叹,不曾不与书在一起的。

    2022-12-08
    000
  • 小度语音唤醒怎么解除禁用

    要解除小度语音唤醒的禁用,只需要下滑屏幕,然后点击【唤醒关闭唤醒开启】即可打开语音唤醒。小度语音唤醒怎么解除禁用小度在家没有传统的智能音箱的麦克风静音键,所以需要在设备屏幕下滑,点击【唤醒关闭唤醒

    2022-12-08
    000
  • 沈阳最大的名表店

    沈阳最大的名表店是亨吉利1928店。亨吉利1928店位于辽宁省沈阳市南京北街312号亨吉利世界名表中心一楼。沈阳最大的名表店沈阳最大的名表店是亨吉利1928店。亨吉利1928店位于辽宁省沈阳市南京北

    2022-12-08
    000
  • 猫灰是什么药

    应该是灰猫。中药材灰猫条又称作“黑汉条”;也有地区称作:羊食子;羊屎条;中药黑汉条为忍冬科荚蒾属植物黑汉条的根,全株入药。四季可采,以9~10月采根或全株较好,鲜用或晒干。猫灰是什么药应该是灰猫。中

    2022-12-08
    000

发表评论

登录后才能评论

评论列表(0条)

    保存