mysql变量有问题,我在这里做什么错的?

时间:2018-09-29 13:46:51

标签: mysql sql if-statement mysql-variables

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

3 个答案:

答案 0 :(得分: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。仅在编程块中允许使用-考虑存储过程,函数和触发器。

答案 1 :(得分:1)

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

  

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

Documentation

但是。您可以使用一个中频。

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

说明:
选择是否[[条件],[时间],[其他])

因为我无法评论您的问题。不赞成投票的原因可能是您不必要的宣誓。我知道您很沮丧,但是一个“该死”就足够了。

答案 2 :(得分:1)

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

@RestController
@RequestMapping("/import")

@PostMapping(value="import")
public ResponseEntity<String> importData(@RequestParam("file") MultipartFile file, @RequestParam("sType") String sType, 
        @RequestParam("CCName") String CCName) throws Exception {

添加了条件,用于当性别数量相等(相同)时,这也是预期的响应。条件select (case sign(sum(gender = 'male') - sum(gender = 'female') ) when 1 then 'male' when -1 then 'female' when 0 then 'same' end) from test; 已删除,将搜索限制为仅性别“ male”。