在使用 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.

Documentation

不过。有一个 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'。