在使用 mysql 变量时遇到问题,我在这里做错了什么?
Having trouble with mysql variables, what am I doing wrong here?
见下文并测试 here。
几个小时以来,我一直在为此烦恼。我搜索了很多帖子,尽我所能判断一切都是正确的。
我在 IF 比较和 @malefemale 变量方面遇到了麻烦。
我可以通过在存储过程中声明变量来解决这个问题,没有任何问题,我只是想让该死的东西在上面的在线编辑器中工作以与朋友分享,在这种情况下,只是为了让该死的东西工作.我错过了什么?
create table test(id int, gender varchar(10), salary int);
insert into test(id, gender, salary) values (1, 'male', 40000), (2, 'male', 50000), (3,'male', 40000), (4, 'female', 60000), (5, 'female', 60000), (6,'female', 40000);
set @m =0;
set @f =0;
set @malefemale = 'same';
select count(*) into @m from test WHERE gender like 'male' and salary >= 50000;
select count(*) into @f from test WHERE gender like 'female' and salary >= 50000;
if @m > @f then
@malefemale = 'male';
else if @f > @m then
set @malefemale ='female';
endif
select @malefemale;
此查询完全不需要变量:
select (case sign(sum(gender = 'male') - sum(gender = 'female') )
when 1 then 'male'
when -1 then 'female'
when 0 then 'same'
end)
from test
where gender like 'male' ;
如果你是运行 this as MySQL代码,那么你的问题很可能不是变量,而是if
。它只允许在编程块中使用——想想存储过程、函数和触发器。
根据 mysql 文档,if 语句只允许在存储的程序中使用。
The IF statement for stored programs implements a basic conditional construct.
不过。有一个 IF 你可以使用。
create table test(id int, gender varchar(10), salary int);
insert into test(id, gender, salary) values (1, 'male', 40000), (2, 'male', 50000),
(3,'male', 40000), (4, 'female', 60000), (5, 'female', 60000), (6,'female', 40000);
set @m =0;
set @f =0;
select count(*) into @m from test WHERE gender like 'male' and salary >= 50000;
select count(*) into @f from test WHERE gender like 'female' and salary >= 50000;
select if (@m > @f, 'male', 'female')
解释:
select 如果([条件]、[然后]、[其他])
而且因为我无法评论您的问题。否决票可能是因为您不必要的咒骂。我能理解你很沮丧,但也许一个 "damn" 就足够了。
我同意 但是,由于我还不能评论,我只想更正代码中的两处:
select (case sign(sum(gender = 'male') - sum(gender = 'female') )
when 1 then 'male'
when -1 then 'female'
when 0 then 'same'
end)
from test;
在性别数量相等(相同)时添加了条件,这也是预期的响应。条件 where gender like 'male'
已删除,将搜索限制为性别 'male'。
见下文并测试 here。
几个小时以来,我一直在为此烦恼。我搜索了很多帖子,尽我所能判断一切都是正确的。
我在 IF 比较和 @malefemale 变量方面遇到了麻烦。
我可以通过在存储过程中声明变量来解决这个问题,没有任何问题,我只是想让该死的东西在上面的在线编辑器中工作以与朋友分享,在这种情况下,只是为了让该死的东西工作.我错过了什么?
create table test(id int, gender varchar(10), salary int);
insert into test(id, gender, salary) values (1, 'male', 40000), (2, 'male', 50000), (3,'male', 40000), (4, 'female', 60000), (5, 'female', 60000), (6,'female', 40000);
set @m =0;
set @f =0;
set @malefemale = 'same';
select count(*) into @m from test WHERE gender like 'male' and salary >= 50000;
select count(*) into @f from test WHERE gender like 'female' and salary >= 50000;
if @m > @f then
@malefemale = 'male';
else if @f > @m then
set @malefemale ='female';
endif
select @malefemale;
此查询完全不需要变量:
select (case sign(sum(gender = 'male') - sum(gender = 'female') )
when 1 then 'male'
when -1 then 'female'
when 0 then 'same'
end)
from test
where gender like 'male' ;
如果你是运行 this as MySQL代码,那么你的问题很可能不是变量,而是if
。它只允许在编程块中使用——想想存储过程、函数和触发器。
根据 mysql 文档,if 语句只允许在存储的程序中使用。
The IF statement for stored programs implements a basic conditional construct.
不过。有一个 IF 你可以使用。
create table test(id int, gender varchar(10), salary int);
insert into test(id, gender, salary) values (1, 'male', 40000), (2, 'male', 50000),
(3,'male', 40000), (4, 'female', 60000), (5, 'female', 60000), (6,'female', 40000);
set @m =0;
set @f =0;
select count(*) into @m from test WHERE gender like 'male' and salary >= 50000;
select count(*) into @f from test WHERE gender like 'female' and salary >= 50000;
select if (@m > @f, 'male', 'female')
解释:
select 如果([条件]、[然后]、[其他])
而且因为我无法评论您的问题。否决票可能是因为您不必要的咒骂。我能理解你很沮丧,但也许一个 "damn" 就足够了。
我同意
select (case sign(sum(gender = 'male') - sum(gender = 'female') )
when 1 then 'male'
when -1 then 'female'
when 0 then 'same'
end)
from test;
在性别数量相等(相同)时添加了条件,这也是预期的响应。条件 where gender like 'male'
已删除,将搜索限制为性别 'male'。