-1

见下文并在此处测试。
我已经为此拉头发了几个小时了。我搜索了很多帖子,尽我所能告诉一切都是正确的。
我在 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;
4

3 回答 3

1

此查询完全不需要变量:

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' ;

如果您将其作为 MySQL 代码运行,那么您的问题可能不是变量,而是if. 它只允许在编程块中使用——想想存储过程、函数和触发器。

于 2018-09-29T13:55:40.257 回答
1

根据 mysql 文档, if 语句只允许在存储的程序中使用。

存储程序的 IF 语句实现了一个基本的条件结构。

文档

然而。有一个 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')

解释:
选择 if ([CONDITION], [THEN], [ELSE])

因为我不能评论你的问题。否决票可能是因为您不必要的咒骂。我可以理解你很沮丧,但也许一个“该死的”就足够了。

于 2018-09-29T14:03:47.343 回答
1

我同意Gordon Linoff 的回应,但由于我还不能发表评论,我只想更正代码中的两件事:

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'已被删除,这将搜索限制为仅性别“男性”。

于 2018-09-29T14:38:09.470 回答