mysql变量有问题,我在这里做错了啥?

Posted

技术标签:

【中文标题】mysql变量有问题,我在这里做错了啥?【英文标题】: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;

【问题讨论】:

为什么投反对票? 【参考方案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' 已被删除,这将搜索限制为仅性别“男性”。

【讨论】:

以上是关于mysql变量有问题,我在这里做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

MobFox iOS 框架,XIB 卸载时崩溃......我在这里做错了啥?

使用 API 不起作用,我在这里做错了啥?

使用 API 时我在这里做错了啥?

嗨,我正在尝试学习 Apache 骆驼框架。我不知道我在这里做错了啥

我将鼠标悬停在一个 p 上,但所有 p 都改变了背景我在这里做错了啥?

C# WinForm TPL 任务调用意外结果-我在这里做错了啥? [复制]