select中的if()函数里如何实现赋值?非常感谢!
时间:2011-05-23
来源:互联网
set @num = 0;
select sum(if(@num<>id,1&&@num=id,0)) from tb_name; //注:id是字段名,tb_name是表名,@num是变量
我想实现的是:当@num<>id时,if函数返回1同时保存id,否则返回0,最后统计1的个数(也就是不同id的个数)。
问题:在if函数里,如何实现1的返回和@num=id的赋值?
非常感谢大家!
作者: apple749769 发布时间: 2011-05-23
select id,count(*) from tt group by id
就行了
作者: WWWWA 发布时间: 2011-05-23
SET @num1='';
select sum(ss) from (
SELECT *,@num:=IF(@num1<>bh,1,0) AS ss,@num1:=bh AS ss1 FROM tb_name ORDER BY id) a;
作者: WWWWA 发布时间: 2011-05-23
所以就产生了这样的问题:若不是用group by进行排重,用count(distinct fields) 这样又需要条件的限制,我这里只好使用变量来保存上一条记录的id,若不相等则sum 1,否则sum 0,但问题是如何将当前id保存进这个变量呢?我无法解决了。。。。
多谢wwwwa的回复,再帮兄弟想想~
作者: apple749769 发布时间: 2011-05-23
SET @num1='';
select sum(ss) from (
SELECT *,@num:=IF(@num1<>id,1,0) AS ss,@num1:=bh AS ss1 FROM tb_name ORDER BY id) a;
or
SELECT COUNT(*) FROM (
SELECT id FROM jzg1 GROUP BY id) a
作者: WWWWA 发布时间: 2011-05-23
呵呵,感谢WWWWA的回复,这里不能用group by,因为我这只是一个非常大的连接里的一个子查询,在外层已经有很多个group by,若再增加一个对id的group by的话,则对其他sum的数据将产生错误。
所以就产生了这样的问题:若不是用group by进行排重,用count(distinct fields) 这样又需要条件的限制,我这里只好使用变量来保存上一条记录的id,若不相等则s……
SET @num:=0;
SET @num1='';
select sum(ss) from (
SELECT *,@num:=IF(@num1<>id,1,0) AS ss,@num1:=bh AS ss1 FROM tb_name ORDER BY id) a;
or
将你的查询存为 VIEW,再分组统计
作者: WWWWA 发布时间: 2011-05-23
SET @num1='';
select sum(ss) from (
SELECT *,@num:=IF(@num1<>id,1,0) AS ss,@num1:=id AS ss1 FROM tb_name ORDER BY id) a;
or
将你的查询存为 VIEW,再分组统计
作者: WWWWA 发布时间: 2011-05-23
而@num=id是一项操作,不能同时进行
作者: rucypli 发布时间: 2011-05-23
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28