【问题标题】:Having trouble with mysql variables, what am I doing wrong here?mysql变量有问题,我在这里做错了什么?
【发布时间】:2019-03-05 06:09:15
【问题描述】:

见下文并测试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;

【问题讨论】:

  • 为什么投反对票?

标签: mysql sql if-statement mysql-variables


【解决方案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。它只允许在编程块中使用——想想存储过程、函数和触发器。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 谢谢,并注意到我的挫败感。
    【解决方案3】:

    我同意Gordon Linoff' response,但由于我还不能发表评论,我只想更正代码中的两点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2013-06-28
      • 2023-01-19
      • 2016-11-07
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      相关资源
      最近更新 更多